Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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,我有以下结构 - folder1 -- script1.py - folder2 -- script2_1.py -- script2_2.py - folder2 -- script3.py script2_1.py中有以下行 os.system("python3 script2_2.py "+str(id)) 如果我使用SSH连接到实例中,请将cd连接到folder2,然后运行script2_1.py python3 script2_1.py 它工作正常,按预期调用

我有以下结构

- folder1
-- script1.py
- folder2
-- script2_1.py
-- script2_2.py
- folder2
-- script3.py
script2_1.py中有以下行

os.system("python3 script2_2.py "+str(id))
如果我使用SSH连接到实例中,请将cd连接到folder2,然后运行script2_1.py

python3 script2_1.py
它工作正常,按预期调用script2_2.py


现在在script1.py中,我想同时调用script2_2.py和script3.py。我已经测试了不同的方法,但还没有成功

方法1

id = str(id)
subprocess.check_call(["/folder2", "script2_2.py "+id])
subprocess.check_call(["/folder3", "script3.py "+id])

PermissionError:[Errno 13]权限被拒绝:'/folder2'

方法2:

id = str(id)
commands = '''
cd /folder2/ 
python3 script2_2.py {} 
cd /folder3/ 
python3 script3.py {} 
'''.format(id, id)
p = subprocess.Popen("/bin/sh", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(commands.encode('utf-8'))
id = str(id)
subprocess.call(['cd /folder2/','python3 script2_2.py {}'.format(id)])
subprocess.call(['cd /folder3/','python3 script3.py {}'.format(id)])

/bin/sh:python3:未找到

方法3:

id = str(id)
commands = '''
cd /folder2/ 
python3 script2_2.py {} 
cd /folder3/ 
python3 script3.py {} 
'''.format(id, id)
p = subprocess.Popen("/bin/sh", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(commands.encode('utf-8'))
id = str(id)
subprocess.call(['cd /folder2/','python3 script2_2.py {}'.format(id)])
subprocess.call(['cd /folder3/','python3 script3.py {}'.format(id)])

FileNotFoundError:[Errno 2]没有这样的文件或目录:'cd/folder2/':'cd/folder2/'

方法4

id = str(id)
subprocess.check_call(["/folder2", "script2_2.py "+id])
subprocess.check_call(["/folder3", "script3.py "+id])
在本例中,我使用字符串和列表测试了args,指定了.py文件的完整路径,带和不带shell=True,不带sys.path,在subprocess.call中带完整路径

id = str(id)
#import sys
#sys.path.insert(1, '/folder2/')
subprocess.call(['/usr/local/bin/python3','/folder2/script2_2.py {}'.format(id)])
#sys.path.insert(1, '/folder3/')
subprocess.call(['/usr/local/bin/python3','/folder3/script3.py {}'.format(id)])

/usr/local/bin/python3:无法打开文件“/folder2/script2_2.py 80”:[Errno 2]没有这样的文件或目录

/usr/local/bin/python3:无法打开文件“/folder3/script3.py 80”:[Errno 2]没有这样的文件或目录


最终,我通过使用和修改方法2,以及python3的完整路径,成功地解决了这个问题

id = str(id)
commands = '''
cd /folder2/ 
/usr/local/bin/python3 script2_2.py {} 
cd /folder3/ 
/usr/local/bin/python3 script3.py {} 
'''.format(id, id)
p = subprocess.Popen("/bin/sh", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(commands.encode('utf-8'))
为了知道哪一个是我SSH到实例中并运行

which python3
返回的

/usr/local/bin/python3