【问题标题】:How do I pass variable command line arguments for a python script, that runs from a batch file?如何为从批处理文件运行的 python 脚本传递可变命令行参数?
【发布时间】:2019-08-22 12:34:43
【问题描述】:

我想从一个批处理文件启动我的 python 脚本。它需要四个参数,通过 sys.argv[n] 在脚本中处理。 这些参数是路径,因程序调用而异。那么如何创建一个批处理文件,每次运行代码时都可以在其中传输程序调用的新参数?我只学了一个学期的 Python,就被这个问题困住了。

最初我创建了一个批处理文件来测试代码是否正在尝试执行。当然,由于缺少参数,它会出错。然后我尝试通过批处理文件传递参数,但它不起作用并给了我之前的错误“列表索引超出范围”:

set 1= path1
set 2= path2
set 3= path3
set 4= path4
"C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe" "C:\repo\PythonProgramme.py" %1 %2 %3 %4
pause

我希望代码能够运行,但如前所述,未通过的 aguments。有人可以帮我解决这个问题,也许给我一个提示,用什么来改变参数(路径)?

【问题讨论】:

    标签: python batch-file command-line-arguments


    【解决方案1】:

    您需要用% 将变量名括起来才能正常工作。您应该阅读 documentation 中的 set 以及 this article 关于批处理变量的信息。

    与此同时,以下应该可以工作。

    set var1=path1
    set var2=path2
    set var3=path3
    set var4=path4
    "C:\[...]\python.exe" "C:\repo\PythonProgramme.py" %var1% %var2% %var3% %var4%
    pause
    

    【讨论】:

    • 这也给了我错误“列表索引超出范围”,命令行如下所示:C:\Users\Administrator\Documents>"C:\Users\Administrator\AppData\Local\程序\Python\Python36\python.exe" "C:\repo\PythonProgramme.py" 234
    【解决方案2】:

    您得到的错误来自您的(未知)python 代码。

    • 虽然不寻常,但您可以仅使用数字设置变量名称
    • 但是要引用这些变量,您需要在两边用百分号括起来%1%
    • %1..%4 引用传递给批处理本身的命令行参数,
      如果没有传递任何参数,则 python 没有要处理的参数
    • 集合中等号周围的空格成为变量名称/内容的一部分。

    虽然以字母开头的变量名称更可取(如 Jacques Gaudin 建议 +1),但您可以尝试:

    "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe" ^
        "C:\repo\PythonProgramme.py" %1% %2% %3% %4%
    

    或者,如果路径集可能包含空格:

    "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe" ^
        "C:\repo\PythonProgramme.py" "%1%" "%2%" "%3%" "%4%"
    

    【讨论】:

    • @JacquesGaudin 欢迎你 ?
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多