1

我使用的是 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 解决方案并且它有效,但是由于我有很多方法使用这些方法,所以我会做很多工作,因为它不仅仅是查找和替换,它还涉及缩进,并且列表的名称也会根据哪种方法发生变化。

4

2 回答 2

2

你会想在你的应用程序中做这样的事情:

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:\Python27\Scripts\bot.py在您的系统上。

更新:除了使用sys.argv[0]谢谢 Alex Taylor)作为“确定入口点目录”的一种方式之外,您还可以使用__file__Python 模块中的“全局”,即模块的“完整路径”。这里唯一需要注意的是,如果您的“包”被压缩或以其他方式导入存档,这将不起作用。看:__file__

于 2015-05-05T02:50:05.847 回答
2

类似于詹姆斯的回答,但使用__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 脚本位置的最佳方式。

于 2015-05-05T03:03:54.997 回答