Twisted SSH curl "'CreateProcess', '系统找不到指定的文件。"

Posted

技术标签:

【中文标题】Twisted SSH curl "\'CreateProcess\', \'系统找不到指定的文件。"【英文标题】:Twisted SSH curl "'CreateProcess', 'The system cannot find the file specified."Twisted SSH curl "'CreateProcess', '系统找不到指定的文件。" 【发布时间】:2013-06-14 02:41:05 【问题描述】:

我使用twisted 制作了一个类似于here 所示的SSH 服务器。我试图像这样向它添加 curl 功能:

class CurlProcessProtocol(protocol.ProcessProtocol):
    def connectionMade(self):
        self.transport.closeStdin()

def do_curl(self, *args):
    "Sets up a download"
    curlProcess = CurlProcessProtocol()
    args = tuple(['curl'])+args
    reactor.spawnProcess(curlProcess, 'curl', args)

我有 curl 所需的文件,可以在与我的程序相同的目录中运行。当我连接到 SSH 服务器并尝试 curl 命令时,我收到以下错误:Error: (2, 'CreateProcess', 'The system cannot find the file specified.') 我尝试在 'curl' 之前附加 os.getcwd()+ 无济于事。

【问题讨论】:

【参考方案1】:

尝试使用 curl 可执行文件的实际路径。很可能不在os.getcwd() 中。 /usr/bin 更有可能(或者可能是 /bin/usr/local/bin 或其他系统定义的位置)。您可能可以通过在 shell 中使用 which curl 找到它。

或者,将 PATH 环境变量添加到您的 spawnProcess 调用中 -

reactor.spawnProcess(
    curlProcess, 'curl', args, env=b"PATH": os.environ[b"PATH"])

或者,可能更好的是,添加您的整个环境:

reactor.spawnProcess(
    curlProcess, 'curl', args, env=os.environ)

PATH 控制系统在尝试执行时查找相对路径名称(如“curl”)的位置。如果未设置,则必须指定绝对路径才能执行任何操作。

【讨论】:

curl 可执行文件在 cwd 中。我把它放在那里。 如果确实如此,并且您指定了它的绝对路径,那么 spawnProcess 会找到它。所以有些东西不是你想的那样。也许您忘记在os.getcwd()"curl" 之间添加一个“/”。我不知道,您的问题中没有完全包含该代码(但您在散文中包含的内容表明您可能已经这样做了)。【参考方案2】:

好的,所以我需要更具体一些。这是一个有效的 do_curl。我必须在 getcwd() 之后添加一个“\”,在 curl 之后添加一个“.exe”。

def do_curl(self, *args):
    "Sets up a download"
    curlProcess = CurlProcessProtocol()
    args = tuple([os.getcwd()+'\curl.exe'])+args
    reactor.spawnProcess(curlProcess, os.getcwd()+'\curl.exe', args)

【讨论】:

你应该使用os.path.join,而不是+。在类 UNIX 操作系统上,您需要 /,而不是 ``. 感谢您的提示。不过,我必须为 Unix 单独执行此操作,因为 Windows 要求我附加“.exe”

以上是关于Twisted SSH curl "'CreateProcess', '系统找不到指定的文件。"的主要内容,如果未能解决你的问题,请参考以下文章

Python SSH服务器(twisted.conch)命令过滤和端口转发

Twisted 简介

ssh-keygen -t rsa -b 4096 -C "邮箱"

curl: (52) 来自服务器的空回复通过 ssh 端口转发

如果服务器不允许SSH连接,可以扭曲SFTP客户端吗?

关于 python Jabber、Twisted、XMLRPC 和 SCP 的简单问题 [关闭]