【问题标题】:Unable to execute Python script from batch file无法从批处理文件执行 Python 脚本
【发布时间】:2017-03-15 03:49:57
【问题描述】:

我正在尝试从命令行运行 Python 程序,因此我创建了一个批处理文件,如下所示:

@py.exe C:\MyPythonScripts\program.py%*
@pause

脚本应该打印一条简单的消息,但是当我在 Windows 运行程序中键入“程序”时,cmd 会出现一秒钟并自行关闭。我做错了什么?

这是代码:

#!python3

def printPicnic(itemsDict,leftWidth,rightWidth):
    print('PICNIC ITEMS'.center(leftWidth + rightWidth,'-'))
    for k,v in itemsDict.items():
        print(k.ljust(leftWidth,'.') + str(v).rjust(rightWidth))

picnicItems = {'sandwiches':4, 'apples': 12, 'cups': 4, 'cookies':8000}
printPicnic(picnicItems,12,5)
printPicnic(picnicItems,20,6)

这是我的 PATH 变量:

> C:\Program Files (x86)\Common
> Files\Intel\Shared
> Files\cpp\bin\Intel64;C:\ProgramData\Oracle\Java\javapath;C:\Program
> Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files
> (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS
> Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files
> (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files
> (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files
> (x86)\Skype\Phone\;C:\Program
> Files\Java\jdk1.8.0_121\bin;C:\MyPythonScripts;C:\Python34;C:\Program
> Files (x86)\Common Files\Intel\Shared
> Files\cpp\bin\Intel64;C:\ProgramData\Oracle\Java\javapath;C:\Program
> Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files
> (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS
> Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files
> (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files
> (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files
> (x86)\Skype\Phone\;C:\Program
> Files\Java\jdk1.8.0_121\bin;C:\Python34\Scripts

【问题讨论】:

标签: python windows batch-file command


【解决方案1】:

关于您的批处理文件,我建议执行以下更改:

您在path%* 之间缺少一个空格,同时将path 括在引号中,以防止路径中有空格时中断

@echo off
py.exe "C:\MyPythonScripts\program.py" %1 %2 %3 %4 %5 %6 %7 %8 %9
pause

【讨论】:

  • 我像您的答案一样编辑了批处理文件,现在它可以工作了!。但我不知道为什么,我的意思是@echo off 做什么以及@py.exepy.exe 之间有什么区别?
  • @Xcecution @ 符号隐藏了命令输入,但可以使用@echo off 替换,这样您就不必在每个命令之前使用@
  • 错了,%*确实包含批处理文件的路径,所以相当于%1 %2 %3 ...!引用路径始终是一种很好的做法,可以避免出现空格和其他特殊字符的问题,但这里的主要问题是路径和 %*...之间缺少空格...
  • 如果.py文件关联配置为通过py.exe执行,则可以直接运行“C:\MyPythonScripts\program.py”。脚本的第一行可以是运行特定 Python 版本的 shebang。这可以是完全限定的路径,例如 #!"C:\Program Files\Python36\python.exe" 或虚拟 Unix 样式的 shebang,例如 #!/usr/bin/python3
【解决方案2】:

您的批处理文件中的问题是缺少 SPACE

@rem               THERE MUST BE A SPACE:
@rem                                 |
@rem                                 V
@py.exe C:\MyPythonScripts\program.py %*
@pause

此外,我强烈建议在路径周围加上引号,以避免出现空格和其他空格字符。

【讨论】:

    【解决方案3】:

    您可以使用以下方法:

    @ECHO OFF
    setlocal
    set PYTHONPATH=C:\Python35 (you version of python)
    C:\MyPythonScripts\program.py  %1<-- (you you have arg)  
    endlocal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多