我已经在Windows机器上开发了一个python脚本,在某些时候它会调用另一个带有一些算法的python脚本。
value="bar"
id="foo"
os.system('"Main.py" %s %s' % (eqid, value))
name=sys.argv[1]
send=sys.argv[2]
此代码在Windows上完美运行,现在我试图在Linux(Ubuntu)上运行它并且我收到错误
sh 1: Main.py: not found
script.py和main.py在同一个目录中
这有什么不对? :/
答案 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)])
(请注意,要严格等效,我将参数转换为字符串,以防它们是例如整数。这不会有害)