[英]python sub-process
我通常在Linux(手動)中執行Fortran文件:
ifort xxx.for -o xxx && ./xxx
(其中'xxx.for'是我的Fortran文件,'xxx'是Fortran可執行文件) 但我需要調用蟒蛇(我是初學者)我的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
如何編寫一個執行上述所有3個步驟的python程序並避免我得到的錯誤?
有一些語法錯誤......
原版的:
cmd=["ssh", sshConnect, "cd %s;"%(workDir), Fortrancmd %s jobname "%s -o %s" exeFilename "%s && %s ./ %s%s"%(exeFilename)]
我想你的意思是:
cmd = [
"ssh",
sshConnect,
"cd %s;" % (workDir,),
"%s %s -o %s && ./%s" % (Fortrancmd, jobname, exeFilename, exeFilename)
]
幾點說明:
PS - 為了便於閱讀,將長列表分成多行通常是個好主意:)
我建議查看此stackoverflow線程的ssh而不是使用子進程
你可以使用fabric來完成第1步和第2步。這是基本的想法:
from fabric.api import *
env.hosts = ['host']
dir = '/home/...'
def compile(file):
with cd(dir):
run("ifort %s.for -o %s" %(file,file))
run("./%s > stdout.txt" % file)
fab compile:filename
一個錯誤:
你的args列表中有一個不帶引號的%s,因此你的字符串格式化會失敗。
下面是一個使用子進程模塊通過ssh運行遠程命令的完整示例(在這種情況下是一個簡單的回聲)並獲取結果,希望它有所幫助:
>>> import subprocess
>>> proc = subprocess.Popen(("ssh", "remoteuser@host", "echo", "1"), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> stdout, stderr = proc.communicate()
在這種情況下返回:('1 \\ n','')
請注意,要在不需要密碼的情況下使其工作,您可能需要將本地用戶的公鑰添加到遠程計算機上的~remoteuser / .ssh / authorized_keys。
你必須使用python嗎?
ssh user @ host“command”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.