如何使用 Python 脚本为批处理文件提供输入?
How to give input to a batch file using Python script?
假设我有一个批处理文件,它要求我输入姓名。我把我的名字输入。这是手动方式。
但我想用 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 次输入。我该怎么做?
这是可行的:我用它来注入使用不可打印的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
Output
python inject_string.py
Do you want to continue [Y/N]?injected string : Y
"User has typed yes"
假设我有一个批处理文件,它要求我输入姓名。我把我的名字输入。这是手动方式。
但我想用 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 次输入。我该怎么做?
这是可行的:我用它来注入使用不可打印的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
Output
python inject_string.py
Do you want to continue [Y/N]?injected string : Y
"User has typed yes"