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

发布于 2024-12-11 09:30:23 字数 511 浏览 0 评论 0原文

我正在尝试执行以下代码,但它不起作用

    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 找不到该文件,因为我不在该目录中。我希望对 Popen 使用 cwd 参数,但它失败了,因为我没有通过 ssh 连接到服务器。

I'm trying to execute the following code but it is not working

    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)

The problem with the first is i can seem to chain together commands after ssh. The 2nd is if i call the file directly the -a arg can't find that file because im not in that directory. I was hoping to use the cwd parameter to Popen, but it fails because I'm not ssh'd into the server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲念泪 2024-12-18 09:30:23

尝试引用发送到 ssh 的命令:

subprocess.Popen('ssh root@IP "cd /opt/msys/pe2/bin;./perlscript.pl;" -a file.csv'

否则您将告诉本地 shell 执行此操作。

Try quoting the command being sent to ssh:

subprocess.Popen('ssh root@IP "cd /opt/msys/pe2/bin;./perlscript.pl;" -a file.csv'

Otherwise you're telling the local shell to do it.

放血 2024-12-18 09:30:23

Subprocess 不是此用例的最佳工具。所有进程监控选项(例如 wait()terminate())都适用于本地进程(ssh 会话),而不适用于远程脚本(例如 perl 脚本)。

我使用 fabric 来处理正在运行的远程脚本。它比尝试将命令与子进程串在一起更容易使用。

Subprocess isn't the best tool for this use case. All the process monitoring options (wait() and terminate() for example) apply to the local process (the ssh session) and not what is happening with the remote script (the perl script for example).

I use fabric to handle running remote scripts. It is easier to use than attempting to string together commands with subprocess.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文