Python 在 linux 上使用 os.system 传递参数

Python passing parameters with os.system on linux

我在 Windows 机器上开发了一个 python 脚本,在某个时候它会调用另一个 python 脚本并带有一些参数。

script.py

value="bar"
id="foo"
os.system('"Main.py" %s %s' % (eqid, value))

main.py

 name=sys.argv[1]
 send=sys.argv[2]

这段代码在 Windows 上完美运行,现在我试图在 Linux (Ubuntu) 上 运行 它并且我收到错误
sh 1: Main.py: not found
script.py和main.py在同一个目录下还有
这里有什么问题? :/

您需要告诉 Linux 如何 运行 Main.py 即指定 'python "Main.py"'(如果 [=19= Windows 则不需要] 被设置为用于打开 .py 文件的默认程序,但无论如何在 Windows 上指定它仍然可以正常工作)

例如

~ $ cat Main.py
import sys
name=sys.argv[1]
send=sys.argv[2]
print name+" "+send
~ $ python
Python 2.7.12 (default, Nov 20 2017, 18:23:56)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> value="bar";id="foo"
>>> os.system('python "Main.py" %s %s' % (id, value))
foo bar
0

但很可能您不应该像这样 运行 编写第二个 python 脚本,而应该导入它并直接调用它的代码。

linux 可能在其默认路径中没有当前目录(安全问题,以防有人编写恶意代码 ls,当您试图了解目录中的内容时执行)。

因此,如果 .py 具有适当的 shebang,您可以执行以下操作:

os.system('"./Main.py" %s %s' % (eqid, value))

但是:

  • 考虑导入脚本而不是 运行 子进程(这是有争议的,例如,如果你想保持两个进程的独立性)
  • os.system 现已弃用。更好的方法是使用 subprocess 模块。

像这样:

subprocess.call(["./Main.py",str(eqid), str(value)])

(请注意,为了严格等效,我 "converted" 字符串的参数,以防万一它们是整数。这不会造成伤害)