Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从父目录运行子进程_Python_Subprocess - Fatal编程技术网

Python从父目录运行子进程

Python从父目录运行子进程,python,subprocess,Python,Subprocess,嘿,我有以下目录结构: 带有a.sh的父目录和带有b.py的子目录py。 现在我想从b.py调用a.sh。我该怎么做 我的努力包括: subprocess.run(['./a.sh'], cwd="..", stdout=subprocess.PIPE) 及 在这两种情况下,我得到: FileNotFoundError: [Errno 2] No such file or directory: './a.sh' 我建议使用根据python脚本的路径计算的绝对路径 import os sou

嘿,我有以下目录结构:

带有
a.sh
的父目录和带有
b.py
的子目录
py
。 现在我想从
b.py
调用
a.sh
。我该怎么做

我的努力包括:

subprocess.run(['./a.sh'], cwd="..", stdout=subprocess.PIPE)

在这两种情况下,我得到:

FileNotFoundError: [Errno 2] No such file or directory: './a.sh'

我建议使用根据python脚本的路径计算的绝对路径

import os

source = os.path.dirname(__file__)
parent = os.path.join(source, '../')
script_path = os.path.join(parent, 'a.sh')
script\u path
将是脚本的绝对路径,并且将根据python脚本的路径进行计算,因此,如果bash脚本始终位于python脚本的相同相对路径,则无论从哪个目录运行程序,它都将始终有效



顺便说一句,我建议始终使用
os.path.join
来计算路径,而决不使用
+
压缩字符串,但使用
格式。我让您检查原因。

尝试使用文件的绝对路径。来自root@AkshayApte我忘记了这不是一个选项,因为绝对路径是可变的,这取决于使用哪台计算机。更改所有这些变量都太麻烦了。。。
import os

source = os.path.dirname(__file__)
parent = os.path.join(source, '../')
script_path = os.path.join(parent, 'a.sh')