从主文件 运行 脚本的更好方法

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() 非常强大并且有很长的参数和选项列表。我强烈建议您阅读文档并尝试至少理解一些基本参数,以找出对您的用例最有意义的参数。