【问题标题】:From Python script how to run other Python script?从 Python 脚本如何运行其他 Python 脚本?
【发布时间】:2019-01-23 21:24:43
【问题描述】:

在我的主Python脚本中,我想调用另一个python脚本来运行,如下:

python2 ~/script_location/my_side_script.py \ --input-dir folder1/in_folder \ --output-dir folder1/out_folder/ \ --image-ext jpg \

在我的 Python 脚本中,我究竟该怎么做?

我将同时使用 Windows 和 Ubuntu,但主要是后者。理想情况下希望能够同时做到这两个。

【问题讨论】:

  • 使用subprocess module。如果您遇到困难,请发布另一个问题,显示您尝试过的代码。
  • 希望您能用语法快速回答这个问题,谢谢
  • 运行sys.executable,如果它应该被锁定到当前版本或虚拟环境。否则,如果它应该使用其他版本或安装的 Python,请在脚本中添加一个 shebang,并在 Unix 中通过chmod +x my_side_script.py 使其可执行。然后就可以直接运行了。在 Windows 中,您要么必须使用 py.exe(如果安装了 3.x)或 python.exe 显式运行脚本,要么使用 shell=True 让 CMD 使用 .py 文件关联运行它。 py.exe 启动器支持 shebangs 中的 Windows 路径以及虚拟 Unix 路径(例如#!/usr/bin/python)。

标签: python windows bash shell ubuntu


【解决方案1】:

您可以在主文件中导入脚本。

假设你有两个文件:myscript.py 和 main.py

# myscript.py
print('this is my script!')
# main.py
print('this is my main file')
import myscript
print('end')

如果您运行main.py,输出将是:

this is my main file
this is my script
end

编辑:如果你只是想调用python2 my_side_script.py --options asdf,你可以使用subprocess python 模块:

import subprocess

stdout = subprocess.check_output(['python2', 'my_side_script.py', '--options', 'asdf'])

print(stdout)      # will print any output from your sidescript

【讨论】:

  • 我希望从我的 main.py python 脚本中直接调用“python2 my_side_script.py --options asdf”。如何做到这一点?
  • 请注意,OP 也需要 Windows 支持,它没有 python2 命令。我不知道是否所有的 Unix(Linux、BSD、macOS 等)系统甚至都有python2。无论如何,要在 Windows 中使用当前的 Python 解释器,请运行“python.exe”(它位于应用程序目录中,始终首先检查)。更一般地,使用带有 shebang 的可执行脚本,并在 Windows 上使用 shell=True 运行它(希望如此,希望很大)。
  • @eryksun 听起来不错。我可以快速检查一下是否有窗口。
  • 对,@eryksun。此解决方案假定 OP 的路径已设置为包含他所需的 python 解释器,并且应该在 windows 和 ubuntu 上都可以工作。如果 OP 不想将 python2 添加到路径中,则使他的脚本成为可执行文件也是一种选择。
  • @khuynh,子进程在 Windows 中使用 CreateProcess。搜索可执行文件时,总是首先检查应用程序目录,因此始终可以找到当前解释器的 python.exe(或只是 python,因为 CreateProcess 将为我们添加“.EXE”)在 Windows 中,即使 PATH 为空。在 Unix 中它依赖于PATH,但 Unix 将大多数命令转储在一两个目录中,所以这不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多