2015-09-25 23 views
0

我想从python2x执行程序。从python调用带有可变参数的linux命令

在终端中,该作业将作为运行:

mpirun -np 8 ~/WORK/scf Fe_SCF.inp > Fe_SCF.out 

Fe_SCF.*处于CWD输入和输出。

现在,我想从python脚本运行这一块。因为,我让他们定义为变量并试图调用为:

call(["mpirun -np 8 ~/WORK/scf", scfin, scfout]) 

给错误:

File "./triolith.py", line 38, in <module> 
     call(["mpirun -np 8 ~/WORK/scf", scfin, scfout]) 
     File "/usr/lib64/python2.7/subprocess.py", line 522, in call 
     return Popen(*popenargs, **kwargs).wait() 
     File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__ 
     errread, errwrite) 
     File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child 
     raise child_exception 
    OSError: [Errno 2] No such file or directory 

使用真正的文件名不解决问题或者:其中给出

call(["mpirun -np 8 ~/WORK/scf", "Fe_SCF.inp", "Fe_SCF.out"]) 

错误:

File "./triolith.py", line 38, in <module> 
    call(["mpirun -np 8 ~/WORK/scf", "Fe_SCF.inp", "Fe_SCF.out"]) 
    File "/usr/lib64/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

我已经检查并确认,使用使用os.system正在与“实”的文件名,但不能与变量名:

os.system("mpirun -np 8 ~/WORK/scf scfin") 

因此,使用两种方法的两个,我怎么能调用该程序一变量名称作为输入和输出?

回答

2

调用需要的清单,所以你的第一个例子应该是:

cmd = ['/absolute/path/to/mpirun', '-np', '8', '~WORK/scf', var_1] 
call(cmd, stdout=var_2, stderr=STDOUT) 
+0

喜...感谢您的回复。它的工作正常,除了var_2应该是写入我的输出的文件。但是这是写输出到标准输出。我也尝试过'cmd = [....,var_1,>>“,var_2]'这也不起作用。 – BaRud

+0

好的,请参阅我的编辑 – hd1

+0

hd1, 这是给我错误'语法错误:无效语法'在'标准输出= var_2' – BaRud

1

在使用OS模块的后一个例子,你应该能够做到:

os.system("mpirun -np 8 ~/WORK/scf "+ var_name) 

要运行的函数调用。

多个变量,d○:

os.system("mpirun -np 8 ~WORK/scf " + var_1 + " " + var_2)