python子进程

2024-05-23 21:58:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我通常在Linux中(手动)执行Fortran文件:

  1. 连接到服务器
  2. 转到特定文件夹
  3. 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个步骤并避免出现错误?


Tags: 文件importcmdforfilenamexxxsubprocessfortran
3条回答

一个错误:
参数列表中有一个未加引号的%s,因此字符串格式化将失败。

有一些语法错误。。。

原件:

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)
      ]

一些注意事项:

  • 具有一个元素的元组要求在第一个参数see(workDir,)的末尾使用逗号来解释为元组(与简单的操作顺序parens相比)
  • 用单个字符串格式操作构造fortan命令可能更容易

为了便于阅读,最好将长列表分成多行:)

我的建议

我建议查看this stackoverflow thread for ssh而不是使用子流程

对于手册部分,您可能需要查看pexpect或windows wexpect。它们允许您在交互条件下执行子流程并传递输入。

不过,你所做的大部分工作听起来在shell脚本中都能很好地工作。为了简单起见,可以在服务器端为服务器端操作生成一个shell脚本,然后在ssh语句中插入路径:

ssh user@host "/path/to/script.sh"

相关问题 更多 >