【发布时间】:2021-04-27 15:24:56
【问题描述】:
我想运行一个使用 python 脚本的批处理文件。 python 脚本需要一个日期作为键输入。
我根据在这里看到的内容尝试了以下操作 (Sending arguments from Batch file to Python script)
@echo off
set /p data_valori=Insert date (format yyyy/mm/dd) :
"C:\Program Files\Anaconda3\python.exe" "S:\pricing\Python\new scarico Market Data ASW_PER_DATA_CUSTOM.py" %data_valori%
然后我的 python 脚本执行以下操作:
import sys
data_valori = str(sys.argv[1])
我设法在 cmd 窗口中插入输入,但它从不调用 python(据我所见),它只是关闭了 cmd 窗口。
我尝试了不同的调用python的选项,例如
python new scarico Market Data ASW_PER_DATA_CUSTOM.py %data_valori%
输入后仍然关闭cmd。
【问题讨论】:
-
set /p data_valori=Insert date (format yyyy/mm/dd) :应该是set /p "data_valori=Insert date (format yyyy/mm/dd) :",它的内容应该在输入提供后进行评估和验证,因为不能期望您的最终用户只遵循提示的格式, (有意或无意)。%data_valori%最好作为"%data_valori%"传递,我原以为您的输入将是参数索引0,而不是参数索引1。 -
我在您的批处理文件代码中看不到任何阻止它在运行命令后关闭的内容,因此如果您从 GUI 运行批处理脚本,那么当然是
cmd.exe窗口将关闭。 -
@Compo sys.argv[0] 始终是 python 文档的脚本名称。
-
1. 并且只是为您提供另一种选择 - 除非您的 bat 文件中还有其他重要的操作,否则您也可以让 Python 脚本请求日期:
data_valori = input("Insert date (format yyyy/mm/dd)")。 2. 顺便说一句,为防止批处理文件窗口在完成运行后自动关闭,请在末尾添加:pause(see this answer)。 3.sys.argv值始终是字符串,因此您不需要str(sys.argv...)。 -
aneroid 是的,有效,我不知道为什么它之前没有在我的 cmd 中显示。 @Compo 是的,添加暂停有助于捕捉错误。顺便说一句,问题不在于输入本身,而在于稍后如何将输入从 python 脚本调用到 Excel 中。我测试了调用输入的两种方式(从 .bat 设置或从 python 输入(),它们都有效。谢谢大家。
标签: python batch-file