如何从python文件调用远程shell脚本?

2024-09-28 03:18:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以从python程序调用shell脚本,但是shell脚本与python文件不在同一目录中? 目前,我刚刚成功地调用了一个shell脚本,该脚本位于调用它的python文件所在的目录中,这要归功于以下命令:

因此,基本上,在我要做的程序中,我不能更改bash脚本的位置,所以我必须找到一种方法从python文件调用这个bash脚本(qnd没有在同一路径中)>

subprocess.call(["./my_shell_script.sh",my_argument])                                                                             

谢谢你

解决方案:

^{pr2}$

乔丹


Tags: 文件方法命令gt路径程序目录脚本
3条回答

./my_shell_script.sh表示当前工作目录“中的my_shell_script。在

您是否尝试过用脚本中的absolute path替换它?在

subprocess.call(["/full/path/to/my_shell_script.sh",my_argument])

或者,如果脚本路径在当前的PATH environment variable中:

^{pr2}$

或者再次(如果脚本路径在当前路径中):

subprocess.call(["bash", "-c", " ".join("my_shell_script.sh",my_argument)])

从上面可以看出,第一个和第二个解决方案需要一个适当的shebang#!/bin/bash)作为脚本的第一行。第三种解决方案没有这种“限制”。在


编辑:

如果要启动路径与当前工作目录相关的脚本,则必须提供relative path。这允许Python脚本和Shell脚本在周围移动,只要它们的相对位置不变。在

例如,如果脚本位于当前工作目录的子目录my_subdir中,则可以编写:

subprocess.call(["my_subdir/my_shell_script.sh",my_argument])

您还必须有机会使用..向上导航到一个级别。你可以多次使用它来提升几个层次。例如:

subprocess.call(["../../a/b/c/my_shell_script.sh",my_argument])

上面的例子将启动my_shell_scripta/b/c子目录中,从当前工作目录上方的两个级别开始。在

如果遇到问题,可以打开整个流程:

p = subprocess.Popen(['/path/to/script','arg1','arg2'], stdout=subprocess.PIPE)
stdout,stderr = p.communicate()

也可以将其设置为shell模式。 这样你就可以让操作系统以你可能更熟悉的方式来处理事情。在

我想你的路径中没有任何奇怪的字符?在

应始终传递脚本的完整路径:

import shlex
import subprocess

cmd = '/bin/bash /home/jordane/scripts/script.sh -opt 1 arg1 arg2'
subprocess.call(shlex.split(cmd))

相关问题 更多 >

    热门问题