从主文件 运行 脚本的更好方法
A better way to run scripts from main file
我有 3 个脚本想要 运行 一个一个地,
目前在我的主文件中有:
主要内容:
parser = get_parser()
args = parser.parse_args()
scripts(q1=args.q1, q2=args.q2, q3=args.q3, q4=args.q4)
脚本:
def scripts(q1, q2, q3, q4):
c1 = 'path/script1.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c1)
c2 = 'path/script2.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c2)
c3 = 'path/script3.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c3)
我正在寻找更好、更安全的原因 运行 而不是 os.system,我试过的其他东西似乎不起作用,比如 imports 和 execs..
感谢您的帮助!
正如评论中所指出的,理想情况下,您希望直接从主 script/program 导入代码和 运行(如果它是 Python 代码)。
然而,这并不总是可行的,在这种情况下,运行宁外部代码的推荐方法是借助 subprocess
module, either via subprocess.run()
进行简单调用,例如:
import subprocess
parser = get_parser()
args = parser.parse_args()
scripts(q1=args.q1, q2=args.q2, q3=args.q3, q4=args.q4)
def scripts(q1, q2, q3, q4):
subprocess.run([
'path/script1.py',
'-q1', q1,
'-q2', q2,
'-q3', q3
'-q4', q4,
])
# Same for c2 and c3
或使用 subprocess.Popen()
进行更复杂的工作,例如:
def scripts(q1, q2, q3, q4):
c1_args = [
'path/script1.py',
'-q1', q1,
'-q2', q2,
'-q3', q3
'-q4', q4,
]
with subprocess.Popen(c1_args, stdout=subprocess.PIPE) as proc:
print(proc.stdout.read())
data = proc.communicate()[0]
rc = proc.returncode
print(rc)
# Same for c2 and c3
Popen()
非常强大并且有很长的参数和选项列表。我强烈建议您阅读文档并尝试至少理解一些基本参数,以找出对您的用例最有意义的参数。
我有 3 个脚本想要 运行 一个一个地, 目前在我的主文件中有:
主要内容:
parser = get_parser()
args = parser.parse_args()
scripts(q1=args.q1, q2=args.q2, q3=args.q3, q4=args.q4)
脚本:
def scripts(q1, q2, q3, q4):
c1 = 'path/script1.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c1)
c2 = 'path/script2.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c2)
c3 = 'path/script3.py' \
' -q1 {} -q2 {} -q3 {} -q4 {}'.format(q1,q2,q3,q4)
os.system(c3)
我正在寻找更好、更安全的原因 运行 而不是 os.system,我试过的其他东西似乎不起作用,比如 imports 和 execs..
感谢您的帮助!
正如评论中所指出的,理想情况下,您希望直接从主 script/program 导入代码和 运行(如果它是 Python 代码)。
然而,这并不总是可行的,在这种情况下,运行宁外部代码的推荐方法是借助 subprocess
module, either via subprocess.run()
进行简单调用,例如:
import subprocess
parser = get_parser()
args = parser.parse_args()
scripts(q1=args.q1, q2=args.q2, q3=args.q3, q4=args.q4)
def scripts(q1, q2, q3, q4):
subprocess.run([
'path/script1.py',
'-q1', q1,
'-q2', q2,
'-q3', q3
'-q4', q4,
])
# Same for c2 and c3
或使用 subprocess.Popen()
进行更复杂的工作,例如:
def scripts(q1, q2, q3, q4):
c1_args = [
'path/script1.py',
'-q1', q1,
'-q2', q2,
'-q3', q3
'-q4', q4,
]
with subprocess.Popen(c1_args, stdout=subprocess.PIPE) as proc:
print(proc.stdout.read())
data = proc.communicate()[0]
rc = proc.returncode
print(rc)
# Same for c2 and c3
Popen()
非常强大并且有很长的参数和选项列表。我强烈建议您阅读文档并尝试至少理解一些基本参数,以找出对您的用例最有意义的参数。