当来自批处理文件的 运行 python 脚本时,如何自动将输入值传递给 python "input" 函数

How to automatically pass an input value to python "input" function, when running python script from batch file

我有这个 python 文件,我每天都必须 运行,所以我正在制作一个批处理文件,我将使用它来自动执行此过程。问题是:这个 python 脚本中有一个输入函数。我每天都要运行它,按“1”,“回车”,就这样。

我通过

了解到
python_location\python.exe python_script_location\test.py

我可以运行脚本。但是,我不知道如何将“1”传递给当我 运行 上述批处理代码时触发的输入函数。

我试过 echo 1 | python_location\python.exe python_script_location\test.py,它给了我一个 'EOF' 错误。

这里有一些解决方案。这个想法是编写一段代码来检查它是否需要从用户或设置变量中获取输入。

解决方案 1:

使用命令行参数设置输入变量。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--some_var', default=None, required=False)
cli_args = parser.parse_args()

def get_input(var_name):
    if auto_input := getattr(cli_args, var_name, None):
        print("Auto input:", auto_input)
        return auto_input
    else:
        return input("Manual input: ")

some_var = get_input("some_var")
print(some_var)

如果运行手动,不带参数执行

$ python3 script.py 
Manual input: 1
1

如果 运行 来自批处理文件,则使用参数执行

$ python3 script.py --some_var=1
Auto input: 1
1

解决方案 2

使用环境变量设置输入变量。

import os

def get_input(var_name):
    if auto_input := os.getenv(var_name):
        print("Auto input:", auto_input)
        return auto_input
    else:
        return input("Manual input: ")

some_var = get_input("some_var")
print(some_var)

如果运行手动,不带环境变量执行

$ python3 script.py 
Manual input: 1
1

如果运行来自批处理文件,使用环境变量执行

$ export some_var=1
$ python3 script.py 
Auto input: 1
1