将python脚本作为子进程调用

我有一个脚本(match1),称fortran可执行
子过程,我想编写另一个脚本(match4)
并行催生几个Match1的实例,然后等待
直到他们都完成。我能想到的唯一方法
是将其称为子过程,而不是直接。
我能够使用Match1隔离地正确工作
subprocess.popen命令,但将match1的实例称为一个
Match4产生的子过程不起作用。
我正在执行的命令(存储为字符串数组)是:
['Python ../src_python/match1.py',
'-file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf',
'-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf',
' - block_start = 62',' - block_end = 62',' - isistep = 16','' - chmetric ='m2'
"," - use_textid ='true'"]]
我称其为:
sub1 = subprocess.popen(命令)
我在下面得到错误。有人知道这个错误是什么
和我做错了什么?甚至可以打电话给另一个
脚本为子过程而不是直接调用它?
文件" ../src_python/match4.py",第24行,在runmatch4中
sub1 = subprocess.popen(command1)
文件"/usr/lib64/python2.5/subprocess.py",第593行,in __init__
errread,errwrite)
文件"/usr/lib64/python2.5/subprocess.py",第1051行,in _execute_child
提高child__ception
OSERROR:[ERRNO 2]没有此类文件或目录
谢谢你的帮助,
凯瑟琳

# 回答1


凯瑟琳·莫洛尼(Catherine Moroney)在2008年11月19日下午2:03写道:
[狙击]
尝试为您的脚本提供完全合格的路径,例如:
['python/home/catherine/src_python/match1.py',' -
file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf',' -
file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf',' -
block_start = 62',' - block_end = 62',' - isistep = 16','' - chmetric ='m2'
"," - use_textid ='true'"]
# 回答2


11月19日,1:03*下午,凯瑟琳·莫里尼(Catherine Moroney)
尝试给出python文件的绝对路径,而不是相对
小路。我不认为子进程模块"知道"在哪里看
否则。
迈克
# 回答3


2008年11月19日星期三,下午2:13,Philip Semanchuk [狙击]
尝试为您的脚本提供完全合格的路径,例如:
['python/home/catherine/src_python/match1.py',
'-file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf',
'-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf',
' - block_start = 62',' - block_end = 62',' - isistep = 16'," - chmetric ='m2'",
" - use_textid ='true'"]
我认为当我遇到此错误时,我添加了shell = true,例如
sub1 = subprocess.popen(命令,shell = true)
# 回答4


我只是尝试了,我遇到了同样的错误。
有趣的是,一个较短(不正确的)版本
命令的运作良好,以使其进入
Match1代码并在此处进行参数检查。
以下代码进入Match1:
而这甚至没有 t致电Match1:
命令=
['python','/data/svn_workspace/cmm/sieglind/usc/ee569/tpaper/test /../ src_python/match1.py
','---file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf',
'-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf',
' - block_start = 62',' - block_end = 62',' - isistep = 16',' - chmetric = m2',
' - use_textid = true']
sub1 = subprocess.popen(命令)
任何人都可以看到缩写版本的原因,以及
全部没有?
凯瑟琳
Philip Semanchuk写道:
[狙击]
尝试为您的脚本提供完全合格的路径,例如:
['python/home/catherine/src_python/match1.py',
'-file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf',
'-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf',
' - block_start = 62',' - block_end = 62',' - isistep = 16','' - chmetric ='m2'
"," - use_textid ='true'"]
# 回答5


丹·厄普顿(Dan Upton)写道:
[狙击]
Try supplying a fully-qualified path to your script, e.g.:['python /home/catherine/src_python/Match1.py ','--file_ref=MISR_AM1_GRP_ELLIPSOID_GM_P228_O003571_BF _F03_0024.hdf ','--file_cmp=MISR_AM1_GRP_ELLIPSOID_GM_P228_O003571_DF _F03_0024.hdf ', ' - block_start = 62',' - block_end = 62',' - isistep = 16'," - chmetric ='m2'"," - use_textid ='true'"]

我认为当我遇到此错误时,我添加了shell = true,例如
sub1 = subprocess.popen(命令,shell = true)
我添加了shell = true,这一次它进入了Match1(Hurray!),
但是它随后打开了一个交互式的python会话,没有
完成,直到我在交互式会话中手动输入"退出"。
Match1看起来像:
如果__name__ ==" __ -main __":
<<< parse参数>>>
runmatch1(file_ref,file_cmp,iblock_start,iblock_end,\
NlineP,NSMPP,Mindispx,MaxDispx,Mindispl,\
maxdispl,istep,chmetric,use_textid)
出口()
例程runmatch1进行所有实际处理。
我如何让Match1正常运行和退出而不打开
交互式会话,当称为Match4的子过程时?
凯瑟琳

# 回答6


2008年11月19日,星期三,下午2:38,凯瑟琳·莫洛尼(Catherine Moroney)
我认为当我遇到此错误时,我添加了shell = true,例如sub1 = subprocess.popen(命令,shell = true)

我添加了shell = true,这一次它进入了Match1(Hurray!),
但是它随后打开了一个交互式的python会话,没有
完成,直到我在交互式会话中手动输入"退出"。
Match1看起来像:
如果__name__ ==" __ -main __":
<<< parse参数>>>
runmatch1(file_ref,file_cmp,iblock_start,iblock_end,\
NlineP,NSMPP,Mindispx,MaxDispx,Mindispl,\
maxdispl,istep,chmetric,use_textid)
出口()
例程runmatch1进行所有实际处理。
我如何让Match1正常运行和退出而不打开
交互式会话,当称为Match4的子过程时?
或者,您是否尝试过,而不是使用参数列表
只是使用字符串? (再次,这就是方式 我做了,我没有
尽管我正在运行shell脚本,但最近遇到了任何问题
或用争论的二进制文件,而不是试图在一个上调用python
脚本。)
命令=" python ../ src_python/match1.py
-file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf
-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf
-block_start = 62 -block_end = 62 -istep = 16 -chmetric ='m2'
-use_textid = true"
proc = subprocess.popen(命令,shell = true)

# 回答7


凯瑟琳·莫洛尼(Catherine Moroney)写道:
如果您想避免去外壳,并且应该 *
原因,您需要将每个论点分开在列表中
没有外壳引用和额外的空间,即
['python','../src_python/match1.py',
'-file_ref = xxxx.hdf','---file_cmp = yyyy.hdf',
' - block_start = xx',' - block_end = 62',' - isistep = 16',' - chmetric = m2',
' - use_texid = true']
杰里米
- -
杰里米·桑德斯(Jeremy Sanders)http://www.jeremysanders.net/
# 回答8


丹·厄普顿(Dan Upton)写道:
那真的是关于错误的纸张。您需要有参数
另外,包括程序的名称,分别在列表中。你
需要删除您可以在UNIX/DOS命令行上使用的任何shell引用。
杰里米
- -
杰里米·桑德斯(Jeremy Sanders)http://www.jeremysanders.net/
# 回答9


丹·厄普顿(Dan Upton)写道:
我添加了shell = true,这次它进入了match1(hurray!),但是然后打开了一个交互式的python会话,直到我在互动session中手动输入'exit'。 ==" __ main __":<<< parse参数>>> runmatch1(file_ref,file_cmp,iblock_start,iblock_end,iblock_end,\ nlinep,nsmpp,nsmpp,mindispx,maxdispx,maxdispx,mindispl,mindispl,\ maxdispl,istep,istep,istep,istep,istep,chmetric,chmetric,chmetric,chmetric exitid) runmatch1是所有实际处理的方法。当被称为Match4的子过程时,我如何使Match1正常运行并正常退出而无需打开Interactive会话?
或者,您是否尝试过,而不是使用参数列表
只是使用字符串? (再次,这就是我这样做的方式,但我没有
尽管我正在运行shell脚本,但最近遇到了任何问题
或用争论的二进制文件,而不是试图在一个上调用python
脚本。)
命令=" python ../ src_python/match1.py
-file_ref = misr_am1_grp_ellipsoid_gm_p228_o003571_bf _f03_0024.hdf
-file_cmp = misr_am1_grp_ellipsoid_gm_p228_o003571_df _f03_0024.hdf
-block_start = 62 -block_end = 62 -istep = 16 -chmetric ='m2'
-use_textid = true"
proc = subprocess.popen(命令,shell = true)
谢谢 - 那就做到了。我刚刚通过一个长字符串
一切实际上都起作用。哇!我不知道这是否是
甚至可以做。
这太酷了,并节省了很多代码重复。我可以
一次产生六个工作,然后等待他们
完成。 Python可以用作一个
脚本语言以及一种成熟的编程语言
同时。
凯瑟琳

标签: python

添加新评论