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

问题描述 投票:2回答:2

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

@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中运行。

我搜索过网络,但是没有一个答案似乎对我有用。以下是我也尝试过的一些链接:Example 1Example 2。我也尝试过其他人,但他们似乎对用户的需求非常具体。

如何开始将Python变量传递到我的批处理文件中?

python batch-file subprocess python-3.6
2个回答
5
投票

如果您希望bash正常工作,您的子进程可能需要与shell一起运行

Actual meaning of 'shell=True' in subprocess

所以

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

如果你想看到输出那么:

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

作为进一步的编辑,这是你所追求的一个工作范例:

苏北.朋友:

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!

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%

将此文件保存为批处理文件,如下所示:file> save as> name_of_file.bat然后选择:另存为:所有文件。

然后在python中调用批处理文件,写:

os.system("name_of_file.bat")

确保所有这些文件都在同一个地图中,以便它们正常工作!你去了,这对我有用,希望我可以用这个评论帮助一些人,因为我搜索了这么长时间才发现它是如何工作的。

PS:我也发布在另一个论坛上,所以如果你看到这个答案两次,请不要困惑。

© www.soinside.com 2019 - 2024. All rights reserved.