从python脚本运行它的不同目录中的bash脚本转储文件

时间:2013-07-18 21:17:53

标签: python shell subprocess

我有一个包含以下代码的python脚本。

Python script: /path/to/pythonfile/
Executable: /path/to/executable/
Desired Output Path: /path/to/output/

我的第一个猜测......

import subprocess

exec = "/path/to/executable/executable"
cdwrite = "cd /path/to/output/"

subprocess.call([cdwrite], shell=True)
subprocess.call([exec], shell=True)

这会转储/path/to/pythonfile/中的所有文件... 我的意思是这是有道理的,但我不确定是什么'自我'假设 - 我的python代码看到的或shell脚本的内容,我认为它在 shell中运行所以如果我在shell中cd,它将cd到所需的目录并转储输出有?

3 个答案:

答案 0 :(得分:2)

正在发生的事情是两个命令彼此独立地执行。你想要做的是进入目录,然后执行。

subprocess.call(';'.join([cdwrite, exec]), shell=True)

您是否在与python文件相同的目录中运行脚本?使用现在的文件,文件应该输出到您运行python脚本的目录(可能是也可能不是脚本的目录)。这也意味着如果您给出的路径cd是相对的,它将相对于您运行python脚本的目录。

答案 1 :(得分:0)

您应该在同一命令中更改目录:

cmd = "/path/to/executable/executable"
outputdir = "/path/to/output/"
subprocess.call("cd {} && {}".format(outputdir, cmd), shell=True)

答案 2 :(得分:0)

您可以使用cwd参数:

from subprocess import check_call

cmd = "/path/to/executable/executable"
check_call([cmd], cwd="/path/to/output")

注意:请勿不必要地使用shell=True