我在从 Windows 批处理文件运行非常简单的 Python 脚本时遇到问题。
批次代码是:
"C:\Python27\python.exe" "V34_File_Converter.py" %*
pause
其中“V34_File_Converter.py”文件位于与批处理文件相同的文件夹中。
Python 代码是:
import os,sys
import psse34
import psspy
print('we are in the program')
args_num = len(sys.argv) - 1
psspy.psseinit()
for f_name in sys.argv[1:]:
print f_name
psspy.read(0,f_name)
f_name_out = os.path.splitext(f_name)[0] + "_V34.RAW"
psspy.rawd_2(0,1,[1,1,1,0,0,0,0],0,f_name_out)
主要问题是当我双击批处理文件时,程序运行良好,打印第一条消息并初始化 PSSE 程序。但是,当我将文件拖放到批处理脚本上时,出现以下错误:
C:\Python27\python.exe: can't open file 'V34_File_Converter.py': [Errno 2] No such file or directory
这很奇怪,考虑到如果没有传递其他参数,文件就没有问题。
感谢您的帮助!
Python脚本文件
V34_File_Converter.py
显然位于批处理文件的目录中,因为批处理文件中引用了没有文件路径的文件。在双击批处理文件开始 cmd.exe
处理批处理文件之前,批处理文件目录被 Windows 设置为当前目录。有两个例外:
%SystemRoot%\System32
设置为当前目录。%SystemRoot%
默认设置为当前目录。但是批处理文件通常也可以从任何其他目录执行。因此,建议在批处理文件中引用其他文件及其完整限定文件名。
打开 命令提示符,运行
call /?
并阅读输出帮助,解释如何从批处理文件中引用批处理文件参数。参数 0 始终是用于开始处理批处理文件的字符串。
这里的解决方案是:
"C:\Python27\python.exe" "%~dp0V34_File_Converter.py" %*
%~dp0
引用参数 0 的驱动器和路径,即批处理文件本身,即批处理文件目录的路径,该目录显然还包含 Python 脚本文件。用 %~dp0
引用的路径字符串始终以反斜杠结尾。因此,在此路径与文件或文件夹名称连接时不应使用额外的反斜杠。
另请参阅: