【问题标题】:How to give input to a batch file using Python script?如何使用 Python 脚本向批处理文件提供输入?
【发布时间】:2015-09-18 03:21:33
【问题描述】:

假设我有一个批处理文件,它要求我输入我的姓名。我把我的名字输入。这是手动方式。

但我想尝试使用 Python。是否有可能我在 Python 脚本中创建一个变量并将我的名字放入变量中并在它要求输入时将该变量传递给 bat 文件?

我的 bat 文件的第一步是问我的名字。询问名称批处理文件用于测试目的。我的主批处理文件有这个代码:

@ECHO OFF

:choice
set /P c=Do you want to continue [Y/N]?
if /I "%c%" EQU "Y" goto :yes
if /I "%c%" EQU "N" goto :no
goto :choice


:yes
"scripts\enter.py" yes
goto :continue

:no
"scripts\kick_out.py" no

:continue
pause 
exit

所以,我希望这会有所帮助。我想传递大约 2 个输入。第一个 Y 和其他当它调用 enter.py 时,它会询问我的登录详细信息。我的用户名和密码。所以,我需要做3个输入。我该怎么做?

【问题讨论】:

  • 为什么不直接编辑批处理文件本身,以便将名称存储在文件中,而不是要求用户输入?
  • 好吧,呃...如果是这样的话,我就不会在这里问了,对吗?大声笑...我需要创建一个 python 脚本,因为我想解析提要中的一些单词,... RSS 提要。我得到了用 python 解析的提要......只需要将它传递给执行主要工作的 bat 文件。

标签: python arrays batch-file parameter-passing


【解决方案1】:

这是可行的:我用它来注入使用不可打印的 ascii 字符(如空字节)的攻击字符串。

使用 Python 3 的示例:

inject_string.py

import ctypes
import time
import subprocess
import binascii


if __name__ =="__main__":
    response = "Y"

    p = subprocess.Popen("echo.bat", stdin = subprocess.PIPE)
    time.sleep(2)

    p.stdin.write(bytes(response, 'ascii')) #Answer the question
    print("injected string :", response)

echo.bat

@ECHO OFF

:choice
set /P c=Do you want to continue [Y/N]?
if /I "%c%" EQU "Y" goto :yes
if /I "%c%" EQU "N" goto :no
goto :choice

:yes
echo "User has typed yes"
goto :continue

:no
echo "User has typed no"

:continue
pause

输出

python inject_string.py
Do you want to continue [Y/N]?injected string : Y
"User has typed yes"

【讨论】:

  • thanx.. 但是,您更改了 bat 文件的代码。看......在我的代码中......它正在调用一个python脚本。它进一步询问我的用户名并通过。我已经在描述中提到了......我如何输入登录名......?谎言我说过..我需要输入3个命令...以及如何使用变量来传递数据..?这条线在做什么` if name =="main": `
  • 得到这个:-`你想继续[Y/N]吗?回溯(最近一次调用最后一次):文件“inject_string.py”,第 13 行,在 p.stdin 中。 write(bytes(response, 'ascii')) #Answer the question TypeError: str() take at most 1 argument (2 given) "User has typed yes" Press any key to continue . . .
  • 我更改了批处理脚本,因为我无权访问 enter.py 或 kick_out.py 。您可以根据需要多次调用 p.stdin.write 输入命令。
  • 什么是“if name == main”:effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm
  • 哦..好的..和thanx..它的工作方式就像它应该的.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多