我通常在Linux中(手动)执行Fortran文件:
ifort xxx.for -o xxx && ./xxx
(其中“xxx.for”是我的Fortran文件,“xxx”是Fortran可执行文件)但是我需要从python调用fortran文件(xxx.for)(我是初学者),所以我使用了subprocess
和以下命令:
cmd = ["ssh", sshConnect, "cd %s;"%(workDir), Fortrancmd %s jobname "%s -o %s" exeFilename "%s && %s ./ %s%s"%(exeFilename)]
但是我犯了个错误,我不知道怎么了。下面是完整的代码:
import string
import subprocess as subProc
from subprocess import Popen as ProcOpen
from subprocess import PIPE
import numpy
import subprocess
userID = "pear"
serverName = "say4"
workDir = "/home/pear/2/W/fortran/"
Fortrancmd = "ifort"
jobname = "rad.for"
exeFilename = "rad"
sshConnect=userID+"@"+servername
cmd=["ssh", sshConnect, "cd %s;"%(workDir), Fortrancmd %s jobname "%s -o %s" exeFilename "%s && %s ./ %s%s"%(exeFilename)]
**#command to execute fortran files in Linux
**#ifort <filename>.for -o <filename> && ./<filename> (press enter)
**#example:ifort xxx.for -o xxx && ./xxx (press enter)
print cmd
如何编写一个python程序来执行上述3个步骤并避免出现错误?
一个错误:
参数列表中有一个未加引号的%s,因此字符串格式化将失败。
有一些语法错误。。。
原件:
我想你的意思是:
一些注意事项:
为了便于阅读,最好将长列表分成多行:)
我的建议
我建议查看this stackoverflow thread for ssh而不是使用子流程
对于手册部分,您可能需要查看pexpect或windows wexpect。它们允许您在交互条件下执行子流程并传递输入。
不过,你所做的大部分工作听起来在shell脚本中都能很好地工作。为了简单起见,可以在服务器端为服务器端操作生成一个shell脚本,然后在ssh语句中插入路径:
相关问题 更多 >
编程相关推荐