【问题标题】:Calling a python script from another python script with arguments does not work从另一个带有参数的 python 脚本调用 python 脚本不起作用
【发布时间】:2018-07-16 11:58:39
【问题描述】:

我很清楚有多个线程在处理这个问题,因为我使用它们来尝试自学如何去做。但是,对我来说它不起作用,我想知道是否有人可以帮助我找到我的错误。

所以我得到了一个程序(我们称之为 prog1),它为每个字符串变量调用一个脚本,如下所示:

os.system(r'C:\Users\user\docs\bla\script.py %s'%variable)

在 script.py 中,我现在只想通过禁用所有代码来测试此调用是否有效,但只是这样做:

def main(string):
    print(string)
    root

if __name__ == "__main__":
    print('I got executed')
    main(sys.argv[1])

问题是,如果我执行 prog1 没有任何反应。没有错误 - 所以它会运行并且控制台会弹出一秒钟。但是,什么也没有发生 - 没有打印任何字符串。如果我直接执行 script.py 它可以工作。

编辑:我通过使用子流程包让它执行没有错误:

subprocess.call(r'C:\...\script.py' %s' %variable,shell = True)

但是,问题仍然存在 - 没有任何反应。或者,我现在注意到,在后台弹出一个 Windows 窗口,询问我想用哪个程序执行以 '.py' 结尾的文件,但这对我没有帮助,因为我想在控制台中执行:(

【问题讨论】:

  • 你应该使用 subprocess 模块,它允许你传递参数。

标签: python arguments call


【解决方案1】:

尝试使用subprocess 模块,它允许更灵活的参数和其他配置更改:

import subprocess
subprocess.check_call(["python.exe", r"C:\Users\user\docs\bla\script.py", variable])

当执行时:

subprocess.check_call(["python", r"C:\Users\user\docs\bla\script.py", "Blue"])

我被处决了

蓝色

有关子流程的更多信息:https://docs.python.org/2/library/subprocess.html

【讨论】:

  • 感谢您的快速响应,但是这会导致以下错误:OSError: [WinError 193] %1 is not an valid Win32 application
  • 我的错,太快了。您需要将 python 作为您的子进程调用的第一个参数添加。
  • 好的,我现在真的觉得很蠢,但是这对我来说执行得不好,它给出了以下错误:TypeError: bufsize must be an integer
  • 我的错,我忘了括号 [...] - 有了这个括号,它不再给出错误,但它陷入了无限循环 - 它永远不会终止 - 我想我几乎得到了现在所有可能的错误xD
  • root 部分外,我执行了您的确切代码。如果没有更多上下文,我不知道它的含义是什么,但我敢打赌这会导致你的循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2013-06-01
相关资源
最近更新 更多