【问题标题】:python: run two scripts with arguments simultaneouslypython:同时运行两个带参数的脚本
【发布时间】:2020-08-16 09:07:56
【问题描述】:

我拥有的是:

import main
import branies

if __name__ == "__main__":
    WEEKDAYS = [1,2,3,4,5]
    for day in WEEKDAYS:
        pd = foo(day)
        main.main(pd)
        branies.main(pd)

我打算同时运行 main.mainbranies.main 参数 pd

我尝试了什么:

subprocess.run("python3 main.py -a {0} & python3 branies.py -a {0}".format(pd), shell=True)

但是这个传参失败,报错:

Traceback (most recent call last):
Traceback (most recent call last):
  File "main.py", line 361, in <module>
  File "branies.py", line 355, in <module>
    main()
    main()
TypeError: main() missing 1 required positional argument: 'pd'
TypeError: main() missing 1 required positional argument: 'pd'

调试:

print("python3 main.py -a {0} & python3 branies.py -a {0}".format(pd))

输出:

python3 main.py -a 2020-02-24 & python3 branies.py -a 2020-02-24

编辑:

import main
import branies

main 和 branies 都是两个 Python 脚本,其中包含函数 main(pd=None),需要参数 pd

【问题讨论】:

  • 能否请您详细介绍一下您的主要功能,问题还不是很清楚
  • @MohammadRijwan 请检查编辑

标签: python-3.x parallel-processing


【解决方案1】:

我不太确定你想要完成什么,但也许这样的事情可以做到:

script1.pyscript2.py(我认为你的 main.pybranies.py):

import sys
from time import sleep
from datetime import datetime

def main(pd):
    sleep(5) # doing some computations
    print(f"time={datetime.now()}, arg={pd}") # also adding "script {1 or 2}" to print statement 

if __name__ == '__main__':
    arg = sys.argv[1]
    main(arg)

main.py:

import subprocess

for pd in [1,2,3]:
    subprocess.run(
        f"python3 script1.py {pd} & python3 script2.py {pd}", 
    shell=True)

来自终端:python main.py;输出:

time=2020-08-16 11:39:17.911350, script 1, arg=1
time=2020-08-16 11:39:17.911350, script 2, arg=1
time=2020-08-16 11:39:22.931387, script 1, arg=2
time=2020-08-16 11:39:22.931387, script 2, arg=2
time=2020-08-16 11:39:27.951381, script 1, arg=3
time=2020-08-16 11:39:27.951358, script 2, arg=3

【讨论】:

  • 我收到错误:TypeError: __call__() 需要 1 到 2 个位置参数,但给出了 3 个
  • 您能否给我看一些您的 main.py 或 branies.py 中的相关代码?编辑:你能单独运行你的脚本(main.py/branis.py)吗?
  • 您的脚本中可能存在问题(call 方法有 3 个参数,但只接受 1 或 2 个)。
  • 但是我们使用的是 run 方法而不是 call 方法
  • 我对您的问题的理解是否正确(参见上面提供的答案)?也就是说,您有两个脚本,它们都带有一个参数(例如sys.argv[1])。在这两个脚本中,您都有一个接受参数的main 函数(因此sys.argv[1] 应该传递给main)。最后,您想要第三个脚本运行这两个脚本并传递参数(例如subprocess.run(f"python3 script1.py {arg} &amp; python3 script2.py {arg}"))?
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2022-12-10
  • 2021-06-06
相关资源
最近更新 更多