os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

A.TNG
Hi All,
 
想用Python来调用系统命令,遇到了问题。
例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
由于用户当前工作目录不确定,于是决定考虑使用绝对路径
c:\a.exe -a -b -c
由于a.exe的路径不确定,有可能存在
c:\document and settings\usera\a.exe -a -b -c的情况,空格导致命令无法正常执行。
用os.system("c:\document and settings\usera\a.exe -a -b -c")就会出现错误。
我使用 "c:\document and settings\usera\a.exe" -a -b -c 在command line里面是正常执行的,但是使用os.system()的话,提示错误。不知道为什么。
 
于是决定考虑使用os中的execv函数来执行这个命令,但是发现所有的exec*函数都提到会replace current process。
 
有没有函数能达到execv的效果,但是不replace current process呢?
 
十分感谢。

--
Best Regard,
Tang, Jiyu (Joey)

_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

kilnt huo
os.popen

def cmn_exec_cmd_and_get_list( cmd, split_symbol = '\n' ):
""" execute a external command and split output into list, then return
the list
"""
out = os.popen( cmd, 'r')
out_txt = out.read()
ret = out.close()
if ret:
raise RuntimeError, '%s failed with exit code %d' % (cmd, ret)
list = out_txt.split( split_symbol )
return list

windows 下的路径有时候有 8.3 的历史遗留问题,换成 ~1 这样就好了。

> Hi All,
> 想用Python来调用系统命令,遇到了问题。
> 例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
> 由于用户当前工作目录不确定,于是决定考虑使用绝对路径
> c:\a.exe -a -b -c
> 由于a.exe的路径不确定,有可能存在
> c:\document and settings\usera\a.exe -a -b -c的情况,空格导致命令无法
> 正常执行。
> 用os.system("c:\document and settings\usera\a.exe -a -b -c")就会出现错误。
> 我使用 "c:\document and settings\usera\a.exe" -a -b -c 在command line
> 里面是正常执行的,但是使用os.system()的话,提示错误。不知道为什么。
> 于是决定考虑使用os中的execv函数来执行这个命令,但是发现所有的exec*函数
> 都提到会replace current process。
> 有没有函数能达到execv的效果,但是不replace current process呢?
> 十分感谢。
>
> --
> Best Regard,
> Tang, Jiyu (Joey)
> ------------------------------------------------------------------------
>
> _______________________________________________
> python-chinese
> Post: send [hidden email]
> Subscribe: send subscribe to [hidden email]
> Unsubscribe: send unsubscribe to  [hidden email]
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

weizi-2
In reply to this post by A.TNG
Mail
python-chinese,你好
 
   os.system(r"c:\document and settings\usera\a.exe -a -b -c")
2008-01-22
----- Original Message -----
Sent: 2008-01-22, 12:27:17
Subject: [python-chinese] os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

Hi All,
 
想用Python来调用系统命令,遇到了问题。
例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
由于用户当前工作目录不确定,于是决定考虑使用绝对路径
c:\a.exe -a -b -c
由于a.exe的路径不确定,有可能存在
c:\document and settings\usera\a.exe -a -b -c的情况,空格导致命令无法正常执行。
用os.system("c:\document and settings\usera\a.exe -a -b -c")就会出现错误。
我使用 "c:\document and settings\usera\a.exe" -a -b -c 在command line里面是正常执行的,但是使用os.system()的话,提示错误。不知道为什么。
 
于是决定考虑使用os中的execv函数来执行这个命令,但是发现所有的exec*函数都提到会replace current process。
 
有没有函数能达到execv的效果,但是不replace current process呢?
 
十分感谢。

--
Best Regard,
Tang, Jiyu (Joey)

_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

Jiahua Huang
In reply to this post by A.TNG
exec 就是替换当前进程.

你需要的是 popen  或 system
你的错误在于引号理用了 \ 却没转义,也没保留引号
你需要用
os.system(r"'c:\document and settings\usera\a.exe' -a -b -c")


注意加的 r 和 里边的单引号

Linux 下 os.popen 可以用参数数组,而 Windows 下必须用字符串,
所以你还是得处理空格

2008/1/22 Joey <[hidden email]>:
> Hi All,
>
> 想用Python来调用系统命令,遇到了问题。
> 例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
> 由于用户当前工作目录不确定,于是决定考虑使用绝对路径
_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

yrh-2
In reply to this post by A.TNG
在cmd里有空格时用多重引号,如:
os.system('""c:\document and settings\usera\a.exe" "-a "-b" "-c""')
注意两头有3个引号,一个单引号,两个双引号
 
单引号是python的需要,表示字符串,两个双引号是cmd的需要
 
在cmd里,os.system(r"c:\document and settings\usera\a.exe -a -b -c")这个肯定不行,因为cmd无法处理其中的空格。
这个问题也曾困扰我很久,我记得好像是在微软的网站上找到的答案。

 
在08-1-22,Joey <[hidden email]> 写道:
Hi All,
 
想用Python来调用系统命令,遇到了问题。
例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
由于用户当前工作目录不确定,于是决定考虑使用绝对路径
c:\a.exe -a -b -c
由于a.exe的路径不确定,有可能存在
c:\document and settings\usera\a.exe -a -b -c的情况,空格导致命令无法正常执行。
用os.system("c:\document and settings\usera\a.exe -a -b -c")就会出现错误。
我使用 "c:\document and settings\usera\a.exe" -a -b -c 在command line里面是正常执行的,但是使用os.system()的话,提示错误。不知道为什么。
 
于是决定考虑使用os中的execv函数来执行这个命令,但是发现所有的exec*函数都提到会replace current process。
 
有没有函数能达到execv的效果,但是不replace current process呢?
 
十分感谢。

--
Best Regard,
Tang, Jiyu (Joey)

_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://python.cn/mailman/listinfo/python-chinese" target="_blank"> http://python.cn/mailman/listinfo/python-chinese


_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese