我有一个包含以下代码的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到所需的目录并转储输出有?
答案 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
。