Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使脚本在不通过命令行传递的情况下自动向另一个脚本提供参数?_Python_Batch File - Fatal编程技术网

Python 如何使脚本在不通过命令行传递的情况下自动向另一个脚本提供参数?

Python 如何使脚本在不通过命令行传递的情况下自动向另一个脚本提供参数?,python,batch-file,Python,Batch File,解释我的问题的最好方法是借助一个例子。 考虑一个Python脚本,它要求一个问题并根据问题给出答案。 QandA.py import os,sys,re ans = input('How you doin\' \(Say Yes\/No\)') if (ans == "Yes"): print("Nice to hear") elif (ans == "No") : print("Oh Too Bad") 上面的脚本通常会提示用户输入,但我也希望它被批处理脚本调用,批处理脚本将

解释我的问题的最好方法是借助一个例子。
考虑一个Python脚本,它要求一个问题并根据问题给出答案。
QandA.py

import os,sys,re

ans = input('How you doin\' \(Say Yes\/No\)')
if (ans == "Yes"):
   print("Nice to hear")
elif (ans == "No") :
   print("Oh Too Bad")
上面的脚本通常会提示用户输入,但我也希望它被批处理脚本调用,批处理脚本将为被调用的Python脚本提供输入。 我将在批处理文件本身中硬编码这些输入(如下所示)

在不修改Python脚本本身以处理可选的命令行参数的情况下,是否有任何方法可以实现这一点(使Python脚本了解ans)?
我希望批处理脚本能够像用户从变量数组中输入脚本一样运行。

.bat
.cmd
中设置的变量应该显示为环境变量。 Python可以读取通过

因此你可以写:

import os

ans = os.environ.get('ans')
if ans is None:  # it was not set, so ask user
    ans = input("How you doin' (Say Yes/No)")

if ans == "Yes":
    print("Nice to hear")
elif ans == "No":
    print("Oh Too Bad")
甚至做一个函数:

def env_or_input(var_name, prompt):
    val = os.environ.get(var_name)
    if val is None:  # it was not set, so ask user
        val = input(prompt)
    return val

...

ans = env_or_input("ans", "How you doin' (Say Yes/No)")
if ans == "Yes":
    print("Nice to hear")
elif ans == "No":
    print("Oh Too Bad")

我认为
echo'Yes'| python QandA.py
可以工作。您可以按固定顺序添加多个答案,以换行符分隔:

cat <<EOF | python QandA.py
Yes
No
Why are you asking?
EOF

cat单一答案中的管道问题很简单:

set ans="Yes"
cd /d "D:Automate Answers"
echo %ans%|python "QandA.py"
但在多个答案中插入管道是很棘手的。由于批处理解析器在每个
&
之前插入了额外的空间,因此以下内容被中断。

在没有额外空间的情况下提供多个答案的最简单方法是延迟
&
的出现,以便准备管道的初始解析过程只在左侧看到一个回声

set "+=&"
echo val1%%+%%echo val2%%+%%echo val3|python "script.py"

如果不修改python脚本,您将使用。但是我不确定是否要在windows中使用它。感谢expect没有太大帮助,但感谢您让我意识到:)我不知道这如何满足不修改python脚本的要求。但是OP似乎喜欢它。好吧,这些不是命令行参数,而且它们在bat中设置要比给出命令行参数容易。我相信OP使用的是Windows
set ans="Yes"
cd /d "D:Automate Answers"
echo %ans%|python "QandA.py"
(echo val1&echo val2&echo val3)|python "script.py"
set "+=&"
echo val1%%+%%echo val2%%+%%echo val3|python "script.py"