【问题标题】:A better way to run scripts from main file从主文件运行脚本的更好方法
【发布时间】:2021-06-06 08:52:01
【问题描述】:

我有 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,我尝试过的其他东西似乎不起作用,比如导入和执行......

感谢您的帮助!

【问题讨论】:

  • 为什么不使用可以导入的函数(在其文件中定义 3 个脚本作为函数)?

标签: python command os.system


【解决方案1】:

正如 cmets 中所指出的,理想情况下,您希望导入代码并直接从您的主脚本/程序运行它(如果它是 Python 代码)。

但是,这并不总是可行的,在这种情况下,推荐的运行外部代码的方法是借助 subprocess module,或者通过 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() 非常强大,并且有很长的参数和选项列表。我强烈建议您阅读文档并尝试至少了解一些基本参数,以找出最适合您的用例的参数。

【讨论】:

  • 感谢您的输入,由于我工作区的权限问题,我目前无法像这样运行我的脚本,但是一旦我将其修复,我将使用它,谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2015-09-05
  • 1970-01-01
  • 2021-12-19
  • 2016-12-03
  • 1970-01-01
  • 2017-04-26
  • 2022-01-27
相关资源
最近更新 更多