将Python变量传递给批处理文件

3

我有一个基本的批处理文件,它可以接受用户输入:

@echo off
set /p Thing= Type Something: 
echo %Thing%
pause

然而,我想使用Python中的变量传递到批处理文件中。比如说一个字符串 'arg1' 这只是一个基本示例,但我仍然无法弄清楚。下面的代码将运行批处理过程,但'arg1'没有任何影响。

import subprocess

filepath = r'C:\Users\MattR\Desktop\testing.bat'

subprocess.call([filepath, 'arg1'])

我也尝试过p = subprocess.Popen([filepath,'arg1']),但批处理文件在Python中无法运行。
我在网上和SO上搜索了一下,但是没有一个答案适用于我。以下是我尝试过的一些链接:示例1示例2。我还尝试了其他方法,但它们似乎相当特定于用户的需求。
如何开始将Python变量传递到我的批处理文件中?
2个回答

8

如果您想让bash正常工作,您的子进程可能需要在shell中运行。

'shell=True'在subprocess中的实际含义

因此,

subprocess.Popen([filepath, 'arg1'], shell=True)

如果你也想看到输出结果:

item = subprocess.Popen([filepath, 'arg1'], shell=True, stdout=subprocess.PIPE)
for line in item.stdout:
     print line

作为进一步的编辑,这里有一个符合您要求的工作示例:
sub.py:
import subprocess
import random


item = subprocess.Popen(["test.bat", str(random.randrange(0,20))] , 
                         shell=True, stdout=subprocess.PIPE)
for line in item.stdout:
    print line

test.bat

@echo off
set arg1=%1
echo I wish I had %arg1% eggs!

运行它:

c:\code>python sub.py
I wish I had 8 eggs!


c:\code>python sub.py
I wish I had 5 eggs!


c:\code>python sub.py
I wish I had 9 eggs!

我遇到了无效语法错误(除了缺少括号之外)。 - MattR
所以这个代码和我的代码运行方式相同:subprocess.call([filepath, 'arg1']),但我无法确定.bat文件是否已经运行或产生了任何影响?在Python中没有显示。 - MattR
我们(主要是你)快要成功了!我得到了<_io.BufferedReader name=3>。非常感谢你的帮助。 - MattR
我确实尝试过那样做,并且尝试将“item”变成列表。但程序挂起了。 - MattR
你可能需要取消暂停。(抱歉之前写了一些关于Bash的内容,后来才意识到这是Windows) - Keef Baker
显示剩余6条评论

0

下面是我成功地将Python变量传递到批处理文件中的方法。 首先,创建一个像这样的Python文件:

import os
var1 = "Hello, world!"
os.putenv("VAR1", var1) #This takes the variable from python and makes it a batch one

首先,前往你想让Python程序工作的文件夹,然后在该目录中右键单击,选择创建新的文本文件,这样就可以制作批处理文件了。在这个文本文件中,写下你想要使用变量做的任何操作,并确保使用%...%的方式调用你的变量,就像这样:
echo %VAR1%

将此文件保存为批处理文件,如下所示:文件>另存为>文件名.bat,然后选择:另存为类型:所有文件。

然后在Python中调用您的批处理文件,编写:

os.system("name_of_file.bat")

确保所有这些文件都在同一个文件夹中才能正常工作!

我的问题就是这样解决的,希望这个评论可以帮助一些人,因为我曾经花了很长时间来寻找如何让它正常工作。

PS:我也在另一个论坛发布了相同的回答,如果你看到两次,请不要感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接