我正在使用Windows 7 x64,当我通过Windows打开程序时 - 运行它无法正常工作。它是明星的,但是当我双击它时,命令无法按照它们的方式工作。
/run cmd /c start "" "C:Python27Scriptsbot.bat"
/run cmd /c start python "C:Python27Scriptsbot.py"
/run python "C:Python27Scriptsbot.py"
我尝试了这些,所有这些都失败了。当简单的双击.bat文件或.py工作。
BAT文件只会调用Python文件
@echo off
start "" "C:Python27Scriptsbot.py"
当我通过Windows打开它时的错误 - 运行是
[Errno 2] No such file or directory: 'list.txt'
list.txt在脚本文件夹中,通过双击打开时,它总是有效的。
更新
我打开文件以读取
g = open("list.txt","r")
再次写:
g = open("list.txt","w")
我已经尝试了詹姆斯解决方案,但它起作用了,但是由于我有很多方法使用这些方法,因此我会得到很多工作,因为它不仅是找到和替换,而且会设想缩进,并且列表的名称更改了,据此。方法。
类似于詹姆斯的答案,但使用__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___
宏通常被认为是确定Python脚本位置的最佳方法。
您需要在应用程序中执行类似的操作:
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]
应该是要执行程序的"完整绝对路径",并希望在您的系统上进行C:Python27Scriptsbot.py
。
更新:替代使用sys.argv[0]
(谢谢Alex Taylor )作为"确定入口点目录"的一种手段,您也可以使用__file__
,这是"全局"在Python模块中,是该模块的"完整路径"。这里唯一的警告是,如果您的"软件包"被拉开或以其他方式进口存档,则这将无法使用。请参阅:__file__