Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扭曲的SSH卷曲“';CreateProcess'';系统找不到指定的文件;_Python_Curl_Ssh_Twisted_Createprocess - Fatal编程技术网

Python 扭曲的SSH卷曲“';CreateProcess'';系统找不到指定的文件;

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

我使用twisted创建了一个类似于图中所示的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命令时,我得到了以下错误:
错误:(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”