使用 shebang 通过 subprocess.call 执行 python 脚本

发布于 2024-11-16 19:12:13 字数 496 浏览 3 评论 0 原文

我正在用 Python 3 编写一个(某种程度上)模块化应用程序,我想从中运行任意程序,该程序是在运行时指定的,不一定是 python 脚本。

所以我使用例如,

subprocess.call([spam, "-i", eggs, "-o", ham])

如果 spam 是一个 python 脚本,shebang 为 python3 和可执行权限,我知道

OSError: [Errno 8] Exec format error

它是否

subprocess.call(["python3", spam, "-i", eggs, "-o", ham])

工作正常。

你知道为什么吗?如何在不指定 python3 的情况下运行 spam

I'm writing a (somewhat) modular application in Python 3 and I'd like to run arbitrary programs from it, said program being specified at runtime and not necessarily a python script.

So I use for example,

subprocess.call([spam, "-i", eggs, "-o", ham])

If spam is a python script, with shebang to python3 and executable rights, I get

OSError: [Errno 8] Exec format error

if I

subprocess.call(["python3", spam, "-i", eggs, "-o", ham])

it works fine.

Do you know why? How can I run spam without specifying python3?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你在看孤独的风景 2024-11-23 19:12:13

您需要使用shell=True,并且需要将数组转换为命令字符串,如下所示:

subprocess.call(' '.join([spam, "-i", eggs, "-o", ham]), shell=True)

这将调用shell而不是直接命令,并且shell应该能够处理舍邦。

You need to use shell=True, and you need your array to be turned into a command string, like this:

subprocess.call(' '.join([spam, "-i", eggs, "-o", ham]), shell=True)

This will invoke the shell instead of the direct command, and the shell should be able to handle the shebang.

亢潮 2024-11-23 19:12:13

尝试

subprocess.call(['spam.py', "-i", eggs, "-o", ham])

Try

subprocess.call(['spam.py', "-i", eggs, "-o", ham])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文