Python交互模式与函数调用模式效果不一样是怎么回事
我有一个 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 就代表执行成功),找不到什么原因,请教下各位大佬,这是什么原因?
Python交互模式与函数调用模式效果不一样是怎么回事
猜测哈,
python 下 os.system 是不等待的,你直接执行,然后是会返回 0 (我记得是),然后继续执行下面的东西。
这时候如果你下面没了(好污),python 直接 over 了,但 os.system 还没执行完,会不会直接被 kill 了?
造成没有执行的结果。
你试着加个 sleep,或者改成 popen ?
我无法理解你的问题
os.system 并非异步
os.system fork 了一个子进程。
在 REPL 中,父进程始终阻塞,子进程可以正常存活。
执行 py 文件时,父进程退出,子进程亦结束。
这样啊,我还以为 win 下没有 fork 呢
那请教一下如何解决这个问题?
不是给你解决方案了么,
sleep ?这个不太好啊,bat 这个时间不定的,经常会更改这个文件,执行时间不定
,popen 还没试,待会儿试试
2 个方法都没有,都是返回 0 就退出了
- 你的 bat 文件中用的都是绝对路径吗?
- 你把 bat 文件的内容换成 echo “ Hello world ” 试试,看看有没有输出。
原来是相对路径,刚改成绝对路径了,echo “ Hello world ” 是可以输出出来的,但现在 exe 还是执行不到,bat 有点复杂,感觉用 python 调用 bat,是不是不太现实?
你把要执行的 exe 换成 notepad.exe 试试,看看记事本会不会弹出来。如果可以的话,可能是你要执行的 exe 程序对环境有一些特殊要求。
我把里边所有的变量都换成绝对路径,现在可以执行了,但 exe 内部又有些相对路径有问题了,还在折腾中
你可以用 subprocess.Popen(),然后传入一个正确的 cwd。


