通过 Python 脚本将多个输入传递给 .bat 文件

Posted

技术标签:

【中文标题】通过 Python 脚本将多个输入传递给 .bat 文件【英文标题】:Passing multiple inputs to .bat file via Python script 【发布时间】:2021-12-10 06:33:06 【问题描述】:

我在通过我的 python 脚本将一些参数传递到 test.bat 文件时遇到问题。

//test.bat
@echo off
:: Extracting and input arguments
set IP=%1
set PASS=%~2
set DIR=%~3

:: Setup logfile
set LOG_FILE="%cd%\testLog.log"
if exist %LOG_FILE% del %LOG_FILE%

echo -------------------------------------------------------- >> %LOG_FILE%
echo Date    :  %date% >> %LOG_FILE%
echo Time    :  %time% >> %LOG_FILE%
echo IP      :  %IP% >> %LOG_FILE%
echo PW      :  %PASS% >> %LOG_FILE%
echo PATH    :  %DIR% >> %LOG_FILE%
.....

test.py

p = subprocess.Popen('test.bat', stdin = subprocess.PIPE)
ipAdr = '127.0.0.1'
pasWD = 'root'
locPath = 'C:\repos\batTester'

p.stdin.write(bytes(ipAdr , 'ascii')) #IP
p.stdin.write(bytes(pasWD , 'ascii')) #password
p.stdin.write(bytes(locPath , 'ascii'))#directory

我明白了,那个浴文件运行正确,因为创建了 testLog.log 文件,但是 IPPWDIR 字段是空的,所以脚本的其余部分无法执行。 我应该如何使用 python 脚本将多个参数传递给 .bat 文件?

【问题讨论】:

顺便说一句,您可以将整个批处理文件更改为此,这样更有效。 1.@(Echo --------------------------------------------------------,2.Echo Date : %DATE%,3.Echo Time : %TIME,4.Echo IP : %~1,5.Echo PW : %~2,6.Echo PATH : %~3) 1> "testLog.log"。没有必要为输入参数定义环境变量,(因为那些已经保存到参数变量中),或者打开一个文件,写入它,然后关闭它,对于每个 @ 987654332@ 命令。 【参考方案1】:

尝试运行subprocess.run:

p = subprocess.run(['test.bat', ipAdr, pasWD, locPath])

【讨论】:

谢谢 ;) 我还有一个问题。文件 test.bat 连接到指定的 IP 地址,但如果主机无法访问,则整个应用程序会冻结很长时间。有什么简单的方法可以避免这种情况吗?我唯一能想到的就是将“子进程”作为单独的线程运行。 你有一个timeout 参数。

以上是关于通过 Python 脚本将多个输入传递给 .bat 文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 bat 脚本将 deluge torrentname 传递给 powershell

使用 argparse 将多个 bash 数组传递给 Python

从批处理文件运行python脚本时,如何自动将输入值传递给python“输入”函数

如何将多个选定的(通过复选框)行 ID 传递给 jQuery 中的 php 脚本?

将多个参数从 c# 传递给 python

python 用于从文本文件中提取电子邮件地址的python脚本。您可以将其传递给多个文件。它将电子邮件地址打印到stdout,on