如何链接ssh,cd,然后在subprocess.Popen中执行

时间:2011-10-21 18:54:56

标签: python ssh

我正在尝试执行以下代码,但它无法正常工作

    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,但它失败了因为我没有进入服务器。

2 个答案:

答案 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 尝试将命令串起来更容易使用。