首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击Python时可从批处理文件运行,但不能在拖放文件时运行

单击Python时可从批处理文件运行,但不能在拖放文件时运行
EN

Stack Overflow用户
提问于 2019-09-16 23:03:15
回答 1查看 169关注 0票数 0

在从Windows批处理文件运行一个非常简单的Python脚本时,我遇到了一个问题。

批次代码为:

代码语言:javascript
复制
"C:\Python27\python.exe" "V34_File_Converter.py" %*
pause

其中"V34_File_Converter.py“文件与批处理文件位于同一文件夹中。

Python代码是:

代码语言:javascript
复制
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程序。但是,当我将文件拖放到批处理脚本上时,我得到以下错误:

代码语言:javascript
复制
C:\Python27\python.exe: can't open file 'V34_File_Converter.py': [Errno 2] No such file or directory 

这很奇怪,因为它发现如果没有传递其他参数,文件就没有问题。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2019-09-17 13:55:54

Python脚本文件V34_File_Converter.py显然在批处理文件的目录中,因为在批处理文件中引用了没有文件路径的文件。双击批处理文件,在启动cmd.exe处理批处理文件前,Windows将批处理文件目录设置为当前目录。有两个例外:

  1. 使用以管理员身份运行的方式启动批处理文件,而不是双击批处理文件,从而经常将%SystemRoot%\System32设置为当前目录。
  2. 双击的批处理文件存储在使用UNC path访问的网络资源上,在这种情况下,默认情况下将%SystemRoot%设置为当前目录。

但是批处理文件通常也可以从任何其他目录执行。因此,建议使用完全限定的文件名引用批处理文件中的其他文件。

打开command prompt,运行call /?并阅读输出帮助,说明如何从批处理文件中引用批处理文件参数。参数0始终是用于启动批处理文件处理的字符串。

这里的解决方案是:

代码语言:javascript
复制
"C:\Python27\python.exe" "%~dp0V34_File_Converter.py" %*

%~dp0引用了参数0的驱动器和路径,即批处理文件本身,即批处理文件目录的路径,该目录显然也包含Python脚本文件。使用%~dp0引用的路径字符串始终以反斜杠结尾。因此,在将此路径与文件名或文件夹名连接时,不应使用其他反斜杠。

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57959619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档