使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本

Posted

技术标签:

【中文标题】使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本【英文标题】:Calling one Python script inside another with command-line arguments 【发布时间】:2022-01-18 03:37:15 【问题描述】:

我有两个独立的 Python 脚本,它们通过提供相关参数独立工作。现在我需要在python2.py中调用python1.py,并传递python1.py接受的相关参数。

这是正确的方法吗?

    python2.py 内创建一个方法call_python1(args) 使用子进程模块执行python1.pypython2.py的main方法中调用call_python1

注意:两个脚本应该像现在一样保持独立工作。

【问题讨论】:

您使用subprocess 运行python 脚本,就像执行任何其他shell 命令一样。所以总体思路是对的。为什么这甚至值得怀疑? 你试过了吗?编写代码然后提出问题可能会更快。 这个假设的call_python1.py函数将如何实现? 方法名错误,已更新 @viki 这是,如果您可以控制python脚本,因为您可以选择调整脚本(如果需要)并使其可作为模块导入,这样您就不必跨越流程边界。否则,程序编写的语言是无关紧要的。 【参考方案1】:

在所描述的情况下,这是正确的方法:两个脚本应该继续作为独立的命令行工具工作。 (如果没有,建议将import 作为一个模块。)

在这种情况下,通常需要确保另一个脚本由同一个 Python 解释器执行,以防安装了多个不同的版本。所以在python2.py 中,也可能在call_python1 函数中,你可以像这样启动子进程:

import subprocess
import sys

subprocess.run([sys.executable, 'python1.py', ...])

这里sys.executable 给出了“[当前] Python 解释器的可执行二进制文件的绝对路径”。省略号表示要传递的附加命令行参数,作为单独的字符串添加到列表中。

【讨论】:

感谢您的宝贵帖子。如果我理解正确,将 python1.py 作为模块导入,在这种情况下,它不能用作独立的命令行脚本? 不,可以。但是你必须以不同的方式传递论点。所以这给代码增加了一些复杂性。这可能是有根据的。这基本上取决于您是否将 Python 模块视为独立脚本,或者它是否是提供某些功能的库。如果编码正确,它也可以是这两件事。 我尝试了以下但仍然失败并出现错误“FileNotFoundError: [Errno 2] No such file or directory” 场景 - 我想在 python2.py 中运行脚本 python1.py 在 python2.py 中我定义了一个方法 def call_script1(a, b, c, d): 这是我尝试并失败并出现上述错误的代码(找不到文件)我尝试了以下但仍然失败并出现错误“FileNotFoundError:[Errno 2]没有这样的文件或目录”场景 - I想在 python2.py 里面运行脚本 python1.py 在 python2.py 里面我定义了一个方法 def call_script1(a, b, c, d): args = " -programArgs=' " + a+ " " +b+" "+c+ " " +d+" ' " script_location = /root/dir/python1.py script_launch = script_location + args subprocess.run([script_launch])【参考方案2】:

您当然可以使用子进程调用 python1.py,但我会避免这种调用,因为您需要管理子进程生命周期(操作系统权限,检查子进程的状态代码,最终进程的状态,等等)。

我的建议是将 python1 转换为可导入包(请参阅the official python documentation 了解更多信息)。

通过这样做,您将获得一组好处:明确定义的需求、版本等。它最终将被不想使用子进程的 python 代码重用。

【讨论】:

谢谢,您知道可导入包是否仍将继续用作独立的命令行脚本吗? 您可以通过运行一个子模块 python 来导入脚本并执行代码来使用它,在这种情况下您可以考虑创建一个 CLI 实用程序 使用 subprocess.run 对我没有任何帮助。不确定是因为服务器上的某些安全性还是其他问题。现在我将导入其他 python 脚本作为模块并在主脚本中使用相关方法。谢谢

以上是关于使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

nodejs怎么调用python命令行

将命令行参数传递给python脚本[重复]

python 如何调用带参数的shell脚本

python开发命令行脚本

怎样才能让python 脚本像shell命令一样直接运行并可以接收参数

shell程序中怎么获取调用参数?