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)命令过滤和端口转发
ssh-keygen -t rsa -b 4096 -C "邮箱"