关于 windows 下直接调用 Python 脚本的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
chenqh
0D
V2EX    Python

关于 windows 下直接调用 Python 脚本的问题

  •  
  •   chenqh 2024-07-12 19:50:09 +08:00 2398 次点击
    这是一个创建于 457 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我记得 linux 下面只要把 python 脚本的目录路径加到 path 里面,然后 xx.py 就可以调用了.

    但是在 windows 下面,要绑架 py 的处理器,也就是 python,然后直接 xx.py 会直接弹出一个黑框,估计是在黑框里 调用了命令行了,这个肯定是不符预期的,毕竟如果出错了,什么也不知道.

    现在我是通过把目录路径添加 PYTHONPATH 里面,然后 python -m xx 来调用的.这效果是最接近的,就是前面多少一个 python -m

    windows 下面有什么方法也像 linux 一样.直接 xx.py,不需要全路径,不会弹黑框

    13 条回复    2024-07-14 21:48:07 +08:00
    bronyakaka
        1
    bronyakaka  
       2024-07-12 19:56:44 +08:00   1
    我知道的 pyinstaller 打包
    qilme
        2
    qilme  
       2024-07-12 20:00:46 +08:00 via Android   1
    绑定 pyw 就行
    ModiKa2022
        3
    ModiKa2022  
       2024-07-13 09:58:00 +08:00
    安装一个 pyenv, 直接使用 pyenv use {对应的 python 版本} 使用 python xx.py 运行
    1rv013c6aiWPGt24
        4
    1rv013c6aiWPGt24  
       2024-07-13 10:13:01 +08:00 via Android
    黑框是 cmd 吧我记得,可以用 pyinstaller 打包
    pursuer
        5
    pursuer  
       2024-07-13 13:14:30 +08:00
    调用命令行是符合预期的行为,你说的黑框只是会 AllocConsole. 绑定 pythonw 就会隐藏 Console 了。
    barkure
        6
    barkure  
       2024-07-13 20:38:27 +08:00 via Android
    pythonw
    fbichijing
        7
    fbichijing  
       2024-07-13 21:23:02 +08:00
    你的描述好奇怪啊。我觉得 Linux 系统和 Windows 系统调用 .py 的方式本质上一样的啊。

    运行 .py 文件:
    1. 通过该该文件的绝对路径;
    2. 如果该文件所在的路径在 path 里面,则可以直接使用文件名;

    所以两者没区别吧。

    你在 linux 调用没有黑框,那是因为是在 console 里面调用运行的。Windows 如果在 console 里面运行也没有黑框啊(本身 console 就是)。
    而至于在 Windows 下双击运行没黑框,将文件后缀改一下就好了。.py > .pyw 。一直都是这么做的吧。自己写的 .pyw 的 gui 如果本地跑而不想打包的话。

    ---------
    "但是在 windows 下面,要绑架 py 的处理器,也就是 python,然后直接 xx.py 会直接弹出一个黑框,估计是在黑框里 调用了命令行了,这个肯定是不符预期的,毕竟如果出错了,什么也不知道."

    这个部分是想表达:linux 下运行 .py 脚本有错误的时候,黑框存在,而 windows 下会一闪而过?
    如果是这样的话,不是必然的吗?在 Windows 里面先打开 console 再运行 .py 文件,异常的话也能被 catch 到。
    ------
    出于我自己对你表述的部分产生的某种思考的延伸,可能你是想表达:在 Windows 下,双击 .py 文件运行了某个脚本,但是异常就直接一闪而过,无法获得异常原因。不知道这是不是你想表达的问题?

    如果这是你想表达的问题之一的话:
    一般都是类似与这种形式(脚本类而不是 gui):
    ```python
    def main():
    pas

    if __name__ == '__main__':
    try:
    main()
    except:
    # 异常代码自己写,或可以通过 traceprint 输出详细信息
    pass
    finally:
    # 最后,将黑窗口停住就行了。好像 C 语言也是这么玩的吧。
    os.system('pause')
    ```

    全局运行的常用的逻辑如果写成脚本的话,还是通过 setup.py 打包成全局命令。可以获得很大的灵活性,同时也直接适配多个系统。我觉得这样做比较有趣。
    chenqh
        8
    chenqh  
    OP
       2024-07-13 21:56:13 +08:00
    @fbichijing 不是啊. linux 下面你在终端输入 xx.py 实际上是在当前终端下运行的啊. 但是 windows 下面你终端 输入 xx.py 他会弹个黑框,然后就消失啊
    julyclyde
        9
    julyclyde  
       2024-07-14 13:54:50 +08:00
    @chenqh 运行完了可不就消失么?你还想怎么样?
    volvo007
        10
    volvo007  
       2024-07-14 19:18:58 +08:00
    如果需要黑框,而且也不介意以 python xx.py 的方式运行的话,可以写一个 .bat 文件,把需要的内容包在里面。

    @echo off
    call c:\xxx\miniconda3\Scripts\activate.bat c:\xxx\miniconda3\your_env
    call conda activate your_env
    call python path\xxx.py
    pause

    这样应该可以,具体细节可以再搜一下,但是应该是可以跑起来并且 cmd 框不会消失的。这两天我刚这么写过一个

    这里的关键一个是如何调用需要的 py 环境(通过 call 一个 conda 的 script ),另一个就是黑框不消失(通过 pause ),这样运行需要你手动 ctrl+c 才会提示退出
    PixelWanderer
        11
    PixelWanderer  
       2024-07-14 20:20:47 +08:00
    linux 是因为前面有#!/usr/bin/python 吧
    chenqh
        12
    chenqh  
    OP
       2024-07-14 21:43:17 +08:00
    @PixelWanderer 是的..
    yinmin
        13
    yinmin  
       2024-07-14 21:48:07 +08:00
    @chenqh 这道题我会解:

    资源管理器右键点 py 文件 -> 打开方式 -> 选择其他应用 -> 选中”始终使用此应用打开.py 文件” -> 选择 pythonw.exe
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5865 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 03:03 PVG 11:03 LAX 20:03 JFK 23:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86