Python 子进程不同的方法
Python subprocess different approaches
我有以下结构
- 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] Permission denied: '/folder2'
方法二:
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'))
这给出了
/bin/sh: python3: not found
方法三:
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] No such file or directory: 'cd /folder2/': 'cd /folder2/'
方法 4:
在这个中,我用字符串和列表测试了 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: can't open file '/folder2/script2_2.py 80': [Errno 2] No such file or directory
/usr/local/bin/python3: can't open file '/folder3/script3.py 80': [Errno 2] No such file or directory
最终我设法通过使用和改编 方法 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
我有以下结构
- 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] Permission denied: '/folder2'
方法二:
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'))
这给出了
/bin/sh: python3: not found
方法三:
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] No such file or directory: 'cd /folder2/': 'cd /folder2/'
方法 4:
在这个中,我用字符串和列表测试了 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: can't open file '/folder2/script2_2.py 80': [Errno 2] No such file or directory
/usr/local/bin/python3: can't open file '/folder3/script3.py 80': [Errno 2] No such file or directory
最终我设法通过使用和改编 方法 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