Python为什么不正确地调用子流程命令?

问题描述 投票:0回答:2

这是对上一个问题的跟进,因为我已经取得了进展(这是无关紧要的)。值得注意的是,我正在学习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/')
python terminal scp
2个回答
0
投票

如果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)         

0
投票

最简单的解决方案是使用shlex.split函数来分割字符串命令。

import subprocess
import shlex


cmd = r'scp c:/users/<name>/desktop/OOGA.txt pi@<IP>:here/'
subprocess.check_call(shlex.split(cmd))

[如果仍有问题,您可以检查我的或其他人回答here。也有很好的讨论,为什么使用shell=True是不好的。

© www.soinside.com 2019 - 2024. All rights reserved.