首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
华为云
V2EX  ›  Python

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

  •  
  •   css3 · 11 天前 · 482 次点击

    我有一个 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 就代表执行成功),找不到什么原因,请教下各位大佬,这是什么原因?

    15 回复  |  直到 2018-11-08 13:54:22 +08:00
        1
    arthasgxy   11 天前
    猜测哈,
    python 下 os.system 是不等待的,你直接执行,然后是会返回 0 (我记得是),然后继续执行下面的东西。
    这时候如果你下面没了(好污),python 直接 over 了,但 os.system 还没执行完,会不会直接被 kill 了?
    造成没有执行的结果。

    你试着加个 sleep,或者改成 popen ?
        2
    css3   11 天前 via iPhone
    @arthasgxy python 交互模式下,os.system 是可以完整运行结束的,为啥会等待啊?
        3
    takeoffyoung   11 天前
    @arthasgxy os.system 并非异步
        4
    takeoffyoung   11 天前
    os.system fork 了一个子进程。
    在 REPL 中,父进程始终阻塞,子进程可以正常存活。
    执行 py 文件时,父进程退出,子进程亦结束。
        5
    arthasgxy   11 天前
    @takeoffyoung 这样啊,我还以为 win 下没有 fork 呢
        6
    css3   11 天前 via iPhone
    @takeoffyoung 那请教一下如何解决这个问题?
        7
    arthasgxy   11 天前
    @css3 不是给你解决方案了么,
        8
    css3   11 天前 via iPhone
    @arthasgxy sleep ?这个不太好啊,bat 这个时间不定的,经常会更改这个文件,执行时间不定
    ,popen 还没试,待会儿试试
        9
    css3   11 天前
    @arthasgxy 2 个方法都没有,都是返回 0 就退出了
        10
    zk8802   11 天前 via iPhone
    - 你的 bat 文件中用的都是绝对路径吗?
    - 你把 bat 文件的内容换成 echo “ Hello world ” 试试,看看有没有输出。
        11
    css3   11 天前
    @zk8802 原来是相对路径,刚改成绝对路径了,echo “ Hello world ” 是可以输出出来的,但现在 exe 还是执行不到,bat 有点复杂,感觉用 python 调用 bat,是不是不太现实?
        12
    zk8802   11 天前 via iPhone
    你把要执行的 exe 换成 notepad.exe 试试,看看记事本会不会弹出来。如果可以的话,可能是你要执行的 exe 程序对环境有一些特殊要求。
        13
    css3   11 天前
    @zk8802 我把里边所有的变量都换成绝对路径,现在可以执行了,但 exe 内部又有些相对路径有问题了,还在折腾中
        14
    zk8802   11 天前 via iPhone
    你可以用 subprocess.Popen(),然后传入一个正确的 cwd。
        15
    css3   10 天前
    @zk8802 现在可以执行了,但就是所有涉及到路径都是绝对路径,相对路径识别不了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3442 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 16ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1