python 程序在被 运行 打开时无法运行
python program doesn't work when opened by run
我正在使用 Windows 7 x64,当我通过 Windows - 运行 打开我的程序时,它无法正常工作。它是星标,但当我双击它时,命令无法正常工作。
/run cmd /c start "" "C:\Python27\Scripts\bot.bat"
/run cmd /c start python "C:\Python27\Scripts\bot.py"
/run python "C:\Python27\Scripts\bot.py"
这些我都试过了,都失败了。
只需双击 .bat 文件或 .py 文件即可。
bat 文件只调用 python 文件
@echo off
start "" "C:\Python27\Scripts\bot.py"
我用Windows-运行打开的错误是
[Errno 2] No such file or directory: 'list.txt'
list.txt 位于 Scripts 文件夹内,双击打开它总是有效。
更新
我打开文件进行阅读使用
g = open("list.txt","r")
再次写入:
g = open("list.txt","w")
我已经尝试过 James 解决方案并且它有效,但是由于我有很多使用这些方法的方法,我会做很多工作,因为它不仅仅是查找和替换,它涉及缩进和列表名称更改按照什么方法。
您需要在您的应用程序中执行类似的操作:
import os
import sys
with open(os.path.join(os.path.dirname(sys.argv[0]), "lists.txt"), "r") as f:
# do something with lists.txt
这消除了 假设,即 lists.txt
将在当前目录或类似目录中。
注意: sys.argv[0]
应该 是正在执行的程序的 "full absolute path" 并且希望 C:\Python27\Scripts\bot.py
在您的系统上。
更新: 使用 sys.argv[0]
的替代方法(谢谢 Alex Taylor)作为 "determining your entrypoint's directory" 的一种方式您还可以使用 __file__
,它是 Python 模块中的 "global",即 "full path" 到 that 模块。这里唯一需要注意的是,如果您的 "package" 是压缩的或者是可导入的存档,这将不起作用。参见:__file__
与 James 的回答类似,但使用 __file__
宏作为获取当前正在执行的脚本的方式:
import os.path
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'list.txt'), 'r') as list_file:
list_data = list_file.read()
问题是工作目录设置为您从中双击的位置,但不是按照您提供的方式从命令行启动。打开命令提示符到脚本的位置并从那里启动也可以,因为文件将在工作目录中。
__file___
宏一般被认为是best way of determining a python script location。
我正在使用 Windows 7 x64,当我通过 Windows - 运行 打开我的程序时,它无法正常工作。它是星标,但当我双击它时,命令无法正常工作。
/run cmd /c start "" "C:\Python27\Scripts\bot.bat"
/run cmd /c start python "C:\Python27\Scripts\bot.py"
/run python "C:\Python27\Scripts\bot.py"
这些我都试过了,都失败了。 只需双击 .bat 文件或 .py 文件即可。
bat 文件只调用 python 文件
@echo off
start "" "C:\Python27\Scripts\bot.py"
我用Windows-运行打开的错误是
[Errno 2] No such file or directory: 'list.txt'
list.txt 位于 Scripts 文件夹内,双击打开它总是有效。
更新
我打开文件进行阅读使用
g = open("list.txt","r")
再次写入:
g = open("list.txt","w")
我已经尝试过 James 解决方案并且它有效,但是由于我有很多使用这些方法的方法,我会做很多工作,因为它不仅仅是查找和替换,它涉及缩进和列表名称更改按照什么方法。
您需要在您的应用程序中执行类似的操作:
import os
import sys
with open(os.path.join(os.path.dirname(sys.argv[0]), "lists.txt"), "r") as f:
# do something with lists.txt
这消除了 假设,即 lists.txt
将在当前目录或类似目录中。
注意: sys.argv[0]
应该 是正在执行的程序的 "full absolute path" 并且希望 C:\Python27\Scripts\bot.py
在您的系统上。
更新: 使用 sys.argv[0]
的替代方法(谢谢 Alex Taylor)作为 "determining your entrypoint's directory" 的一种方式您还可以使用 __file__
,它是 Python 模块中的 "global",即 "full path" 到 that 模块。这里唯一需要注意的是,如果您的 "package" 是压缩的或者是可导入的存档,这将不起作用。参见:__file__
与 James 的回答类似,但使用 __file__
宏作为获取当前正在执行的脚本的方式:
import os.path
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'list.txt'), 'r') as list_file:
list_data = list_file.read()
问题是工作目录设置为您从中双击的位置,但不是按照您提供的方式从命令行启动。打开命令提示符到脚本的位置并从那里启动也可以,因为文件将在工作目录中。
__file___
宏一般被认为是best way of determining a python script location。