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

2024-07-12 19:50:09 +08:00
 chenqh

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

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

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

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

2355 次点击
所在节点    Python
13 条回复
bronyakaka
2024-07-12 19:56:44 +08:00
我知道的 pyinstaller 打包
qilme
2024-07-12 20:00:46 +08:00
绑定 pyw 就行
ModiKa2022
2024-07-13 09:58:00 +08:00
安装一个 pyenv, 直接使用 pyenv use {对应的 python 版本} 使用 python xx.py 运行
1rv013c6aiWPGt24
2024-07-13 10:13:01 +08:00
黑框是 cmd 吧我记得,可以用 pyinstaller 打包
pursuer
2024-07-13 13:14:30 +08:00
调用命令行是符合预期的行为,你说的黑框只是会 AllocConsole. 绑定 pythonw 就会隐藏 Console 了。
barkure
2024-07-13 20:38:27 +08:00
pythonw
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():
pass

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

全局运行的常用的逻辑如果写成脚本的话,还是通过 setup.py 打包成全局命令。可以获得很大的灵活性,同时也直接适配多个系统。我觉得这样做比较有趣。
chenqh
2024-07-13 21:56:13 +08:00
@fbichijing 不是啊. linux 下面你在终端输入 xx.py 实际上是在当前终端下运行的啊. 但是 windows 下面你终端 输入 xx.py 他会弹个黑框,然后就消失啊
julyclyde
2024-07-14 13:54:50 +08:00
@chenqh 运行完了可不就消失么?你还想怎么样?
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
2024-07-14 20:20:47 +08:00
linux 是因为前面有#!/usr/bin/python 吧
chenqh
2024-07-14 21:43:17 +08:00
@PixelWanderer 是的..
yinmin
2024-07-14 21:48:07 +08:00
@chenqh 这道题我会解:

资源管理器右键点 py 文件 -> 打开方式 -> 选择其他应用 -> 选中”始终使用此应用打开.py 文件” -> 选择 pythonw.exe

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

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

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

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

© 2021 V2EX