Python 交互模式与函数调用模式,效果不一样是怎么回事

2018-11-07 21:05:34 +08:00
 css3

我有一个 test.bat 文件,这个 bat 里边调用了一些 exe 可执行文件

我在 python 交互模式下,执行 os.system("C:\Users\Desktop\test.bat"),程序是正常执行的,里边的 exe 文件也成功执行,可是我用函数地封装了一下,放到一个.py 文件里运行时,发现这句 os.system("C:\Users\Desktop\test.bat")没有执行(是根据 bat 里边的 exe 是否执行来判断的,但这里,并没有调用到 exe 文件),但返回值是 0 (按道理来说,0 就代表执行成功),找不到什么原因,请教下各位大佬,这是什么原因?

1953 次点击
所在节点    Python
15 条回复
arthasgxy
2018-11-07 21:11:12 +08:00
猜测哈,
python 下 os.system 是不等待的,你直接执行,然后是会返回 0 (我记得是),然后继续执行下面的东西。
这时候如果你下面没了(好污),python 直接 over 了,但 os.system 还没执行完,会不会直接被 kill 了?
造成没有执行的结果。

你试着加个 sleep,或者改成 popen ?
css3
2018-11-07 21:20:38 +08:00
@arthasgxy python 交互模式下,os.system 是可以完整运行结束的,为啥会等待啊?
takeoffyoung
2018-11-07 21:26:11 +08:00
@arthasgxy os.system 并非异步
takeoffyoung
2018-11-07 21:33:02 +08:00
os.system fork 了一个子进程。
在 REPL 中,父进程始终阻塞,子进程可以正常存活。
执行 py 文件时,父进程退出,子进程亦结束。
arthasgxy
2018-11-07 21:39:02 +08:00
@takeoffyoung 这样啊,我还以为 win 下没有 fork 呢
css3
2018-11-07 21:39:53 +08:00
@takeoffyoung 那请教一下如何解决这个问题?
arthasgxy
2018-11-07 21:46:06 +08:00
@css3 不是给你解决方案了么,
css3
2018-11-07 21:52:41 +08:00
@arthasgxy sleep ?这个不太好啊,bat 这个时间不定的,经常会更改这个文件,执行时间不定
,popen 还没试,待会儿试试
css3
2018-11-08 09:39:28 +08:00
@arthasgxy 2 个方法都没有,都是返回 0 就退出了
zk8802
2018-11-08 09:49:14 +08:00
- 你的 bat 文件中用的都是绝对路径吗?
- 你把 bat 文件的内容换成 echo “ Hello world ” 试试,看看有没有输出。
css3
2018-11-08 09:51:44 +08:00
@zk8802 原来是相对路径,刚改成绝对路径了,echo “ Hello world ” 是可以输出出来的,但现在 exe 还是执行不到,bat 有点复杂,感觉用 python 调用 bat,是不是不太现实?
zk8802
2018-11-08 10:07:22 +08:00
你把要执行的 exe 换成 notepad.exe 试试,看看记事本会不会弹出来。如果可以的话,可能是你要执行的 exe 程序对环境有一些特殊要求。
css3
2018-11-08 10:26:29 +08:00
@zk8802 我把里边所有的变量都换成绝对路径,现在可以执行了,但 exe 内部又有些相对路径有问题了,还在折腾中
zk8802
2018-11-08 11:01:58 +08:00
你可以用 subprocess.Popen(),然后传入一个正确的 cwd。
css3
2018-11-08 13:54:22 +08:00
@zk8802 现在可以执行了,但就是所有涉及到路径都是绝对路径,相对路径识别不了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/505529

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX