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

时间:2018-01-15 15:21:01

标签: python linux python-3.x os.system

我已经在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在同一个目录中 这有什么不对? :/

2 个答案:

答案 0 :(得分:1)

你需要告诉Linux如何运行Main.py,即指定'python "Main.py"'(如果将python设置为用于打开.py文件的默认程序,则不需要在Windows上使用它,但它仍然可以工作无论如何都可以在Windows上指定它。

e.g。

~ $ 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脚本,而是应该导入它并直接调用它的代码。

答案 1 :(得分:1)

linux可能没有当前dir的默认路径(安全问题,以防有人编码恶意ls,当你试图知道目录中的内容时执行它。)

因此,如果.py有适当的shebang,你可以这样做:

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

但:

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

像这样:

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

(请注意,要严格等效,我将参数转换为字符串,以防它们是例如整数。这不会有害)