Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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错误地调用子进程命令?_Python_Terminal_Scp - Fatal编程技术网

为什么Python错误地调用子进程命令?

为什么Python错误地调用子进程命令?,python,terminal,scp,Python,Terminal,Scp,这是对上一个问题的跟进,因为我已经取得了进展(这一点与此无关)。值得注意的是,我正在学习python,几乎不知道自己在做什么,但我熟悉编程。我试图通过python在windows终端中调用SCP命令。然而,它并没有达到预期的效果。该脚本运行平稳,没有错误,并按我编写的方式打印调试命令。然而,SCP呼叫实际上并没有在另一端通过。为了确保我有正确的命令,我将它设置为打印它之后调用的相同命令。当我复制这个打印的命令并将其粘贴到windows命令终端时,它会提供所需的效果。为什么同一个命令在python

这是对上一个问题的跟进,因为我已经取得了进展(这一点与此无关)。值得注意的是,我正在学习python,几乎不知道自己在做什么,但我熟悉编程。我试图通过python在windows终端中调用SCP命令。然而,它并没有达到预期的效果。该脚本运行平稳,没有错误,并按我编写的方式打印调试命令。然而,SCP呼叫实际上并没有在另一端通过。为了确保我有正确的命令,我将它设置为打印它之后调用的相同命令。当我复制这个打印的命令并将其粘贴到windows命令终端时,它会提供所需的效果。为什么同一个命令在python中不能正常工作?谢谢这是我的剧本:

import subprocess

subprocess.run(['scp', 'c:/users/<name>/desktop/OOGA.txt', 'pi@<IP>:here/'], shell=True)
print ("done")
print ('scp', 'c:/users/<name>/desktop/OOGA.txt', 'pi@<IP>:here/')
导入子流程
subprocess.run(['scp','c:/users//desktop/OOGA.txt','pi@:here/'],shell=True)
打印(“完成”)
打印('scp','c:/users//desktop/OOGA.txt','pi@:here/'))

如果shell设置为True,请尝试使用原始字符串:

from subprocess import run as subrun

status = subrun(r'scp c:/users/<name>/desktop/OOGA.txt pi@<IP>:here/',shell=True)
print("Done")
print(status)         
从子流程导入作为子运行运行
status=subrun(r'scp c:/users//desktop/OOGA.txt pi@:here/',shell=True)
打印(“完成”)
打印(状态)

最简单的解决方案是使用函数拆分字符串命令

import subprocess
import shlex


cmd = r'scp c:/users/<name>/desktop/OOGA.txt pi@<IP>:here/'
subprocess.check_call(shlex.split(cmd))
导入子流程
导入shlex
cmd=r'scp c:/users//desktop/OOGA.txt pi@:here/'
子进程check_调用(shlex.split(cmd))

如果某些东西仍然不起作用,你可以检查我的或其他人的答案。也有很好的讨论为什么使用
shell=True
是不好的

当参数是一个列表时,
shell=True
是没有意义的。当我不使用
shell=True
时,我会得到一个很长的错误,这是我上一个问题的问题。我没有得到一个明确的答案,我发现唯一有效的方法是添加此参数。第一个参数应该是
[command,arg1,arg2,…]
格式的列表,或者是带有完整命令行的单个字符串。当它是单个字符串时,
shell=True
说明它是否应该使用shell来解析它。您的上一个问题在列表中只有一个字符串,这是错误的。我已为上一个问题添加了一个这样的答案。谢谢您的帮助。不幸的是,使用带有
shell=true
的单个字符串会产生与此问题相同的结果,而将其拆分为不带
shell=true
的字符串会产生与另一个相同的错误。