Python论坛  - 讨论区

标题:[python-chinese] os中的execl, execle, execlp等函数用来执行系统命令,为什么会replace current process呢?

2008年01月22日 星期二 12:27

Joey tang.jiyu在gmail.com
星期二 一月 22 12:27:17 HKT 2008

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µÄЧ¹û£¬µ«ÊDz»replace current processÄØ£¿

Ê®·Ö¸Ðл¡£

-- 
Best Regard,
Tang, Jiyu (Joey)
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20080122/8a86bb45/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2008年01月22日 星期二 12:49

kilnt.huo kilnt.huo在gmail.com
星期二 一月 22 12:49:18 HKT 2008

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 python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2008年01月22日 星期二 12:53

nmweizi nmweizi在163.com
星期二 一月 22 12:53:31 HKT 2008

python-chinese£¬ÄãºÃ

   os.system(r"c:\document and settings\usera\a.exe -a -b -c")
nmweizi£¬nmweizi在163.com
2008-01-22 
----- Original Message ----- 
From: Joey 
To: python-chinese 
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µÄЧ¹û£¬µ«ÊDz»replace current processÄØ£¿

Ê®·Ö¸Ðл¡£

-- 
Best Regard,
Tang, Jiyu (Joey) 
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20080122/dec24033/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2008年01月22日 星期二 12:59

Jiahua Huang jhuangjiahua在gmail.com
星期二 一月 22 12:59:21 HKT 2008

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 <tang.jiyu at gmail.com>:
> Hi All,
>
> 想用Python来调用系统命令,遇到了问题。
> 例如想调用a.exe,并跟一些参数,命令格式为: a.exe -a -b -c
> 由于用户当前工作目录不确定,于是决定考虑使用绝对路径

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2008年01月22日 星期二 21:53

yrh yrh168在gmail.com
星期二 一月 22 21:53:13 HKT 2008

在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 <tang.jiyu在gmail.com> 写道:
>
> 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 python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20080122/6cd95b04/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号