Python 扭曲的SSH卷曲“';CreateProcess'';系统找不到指定的文件;
我使用twisted创建了一个类似于图中所示的SSH服务器。我尝试向其添加curl功能,如下所示:Python 扭曲的SSH卷曲“';CreateProcess'';系统找不到指定的文件;,python,curl,ssh,twisted,createprocess,Python,Curl,Ssh,Twisted,Createprocess,我使用twisted创建了一个类似于图中所示的SSH服务器。我尝试向其添加curl功能,如下所示: class CurlProcessProtocol(protocol.ProcessProtocol): def connectionMade(self): self.transport.closeStdin() def do_curl(self, *args): "Sets up a download" curlProcess = CurlProcess
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命令时,我得到了以下错误:
错误:(2,'CreateProcess',系统找不到指定的文件。
我尝试在'curl'
之前添加os.getcwd()+
,但没有效果。尝试使用curl可执行文件的实际路径。很可能它不在os.getcwd()
中/usr/bin
更有可能(或可能是/bin
或/usr/local/bin
或其他系统定义的位置)。您可能可以在shell中使用哪个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”)的位置。如果未设置,则必须指定一个绝对路径才能执行任何操作。好的,所以我需要更具体一些。这是一个工作卷发。我必须在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)
curl可执行文件位于cwd中。我把它放在那里。如果它真的是,并且你指定了它的绝对路径,那么spawnProcess就会找到它。所以有些东西不是你的想法。也许您忘记在
os.getcwd()
和“curl”
之间加上“/”。我不知道,您的问题中并没有包含该代码(但您的文章中包含的内容表明您可能已经这样做了)。您应该使用os.path.join
,而不是+
。在类UNIX操作系统上,您需要的是/
,而不是```。谢谢您的提示。但我必须为Unix单独执行,因为Windows要求我附加“.exe”