我正在尝试执行以下代码,但它无法正常工作
p = subprocess.Popen("ssh root@IP cd /opt/msys/pe2/bin;./perlscript.pl; -a file.csv",
shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
OR:
p = subprocess.Popen("ssh root@IP /opt/msys/pe2/bin/perlscript.pl; -a file.csv",
shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
第一个问题是我似乎可以在ssh之后将命令链接在一起。第二个是如果我直接调用文件-a arg找不到该文件,因为我不在该目录中。我希望将cwd参数用于Popen,但它失败了因为我没有进入服务器。
答案 0 :(得分:3)
尝试引用发送到ssh的命令:
subprocess.Popen('ssh root@IP "cd /opt/msys/pe2/bin;./perlscript.pl;" -a file.csv'
否则你告诉本地shell这样做。
答案 1 :(得分:2)
Subprocess不是此用例的最佳工具。所有进程监视选项(例如 wait()和 terminate())都适用于本地进程(ssh会话),而不适用于远程脚本(例如perl脚本。)
我使用fabric来处理正在运行的远程脚本。它比使用 subprocess 尝试将命令串起来更容易使用。