2013-05-01 188 views
1

我有旧的python。所以不能使用子进程。 我有两个python脚本。一个primary.py和另一个secondary.py。 运行primary.py时,我需要运行secondary.py。用os.system运行另一个python脚本

格式运行secondary.py是 '蟒蛇secondary.py参数'

os.system('python secondary.py Argument')...is giving error saying that can't open file 'Argument': [Errno 2] No such file or directory

+0

你可以* *使用[子反向移植(https://code.google.com/p/python-subprocess32/)。 – 2013-05-01 20:55:20

+0

您在下面的评论中提到您使用的是Python 2.6。子进程可用于该版本的Python。 – SethMMorton 2013-05-01 21:22:16

回答

1

给你描述的代码,能够拿出有三个原因这个错误:

  • python ISN对您的PATH
  • secondary.py不在您当前的工作目录中。
  • Argument不在您当前的工作目录中。

从你编辑的问题,这听起来像它的最后三个,这意味着问题可能有无关system在所有...但让我们看看如何解决反正所有三个。

首先,您需要的路径与运行primary.pypython相同,这是sys.executable的用途。

然后你想要一个路径secondary.py。不幸的是,对于这一个,没有办法(在Python 2.3中)可以保证工作......但在许多POSIX系统中,在很多情况下,sys.argv\[0\]将是绝对路径,因此您可以仅使用dirnamejoin中的os.path将其转换为绝对路径secondary.py

然后,假设Argument是在脚本目录,做同样的事情:

my_dir = os.path.dirname(sys.argv[0]) 
os.system('%s %s %s' % (sys.executable, 
         os.path.join(my_dir, 'secondary.py'), 
         os.path.join(my_dir, 'Argument'))) 
0

哪个Python版本,你呢? 你能显示你的secondary.py的内容吗? 对于较新的版本,它似乎正常工作:

[email protected]:$ cat f.py 
import os 
os.system("python s.py Arg") 

[email protected]:$ cat s.py 

print "OK!!!" 
[email protected]:$ python f.py 
OK!!! 
[email protected]:$ 
+0

仅仅因为它在一种情况下工作并不意味着它可以在任何可能的情况下工作。例如,如果'python'不在PATH上,并且你在shell上执行'/ opt/python23/bin/python f.py',你的代码将不起作用。 – abarnert 2013-05-01 20:59:35

+0

我应该更清楚。这两个文件primary.py和secondary.py在同一目录.....我有python 2.6.2 ......我需要在shell中运行secondary.py参数.... secondary.py基本上在当前目录中搜索名称为“Argument”的文件并打印它们....当我单独运行secondary.py时,它工作在fin ...只有当我尝试通过primary.py来完成时,我得到错误.....非常感谢 – user2340760 2013-05-01 21:03:28

+0

是的,我很清楚这个例子不是一个证明。无论如何,对于我来说,有这样的信息是非常意外的:'无法打开文件'参数'' - 如果PATH会出现问题,那么消息会说'python'或'secondary.py'无法打开。 – ddzialak 2013-05-01 21:06:54

相关问题