将 Python 变量传递给批处理文件
Passing a Python Variable to Batch File
我有一个接受用户输入的基本批处理文件:
@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,但 none 的答案似乎对我有用。这里有一些我也尝试过的链接:Example 1, Example 2。我也尝试过其他的,但它们似乎非常符合用户的需求。
如何开始将 Python 变量传递到我的批处理文件中?
如果您希望 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
作为进一步的编辑,这里有一个您所追求的工作示例:
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!
以下是我如何设法将变量从 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%
将此文件另存为批处理文件,如下所示:文件>另存为>name_of_file.bat 然后select:另存为文件:所有文件。
然后在 python 中调用您的批处理文件,写入:
os.system("name_of_file.bat")
确保所有这些文件都在同一个地图中以便它们工作!
好了,这对我有用,希望我可以帮助一些人发表评论,因为我搜索了很长时间才找到它是如何工作的。
PS: 我也在另外一个论坛发过贴,如果你看到这个答案两次,请不要迷惑。
我有一个接受用户输入的基本批处理文件:
@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,但 none 的答案似乎对我有用。这里有一些我也尝试过的链接:Example 1, Example 2。我也尝试过其他的,但它们似乎非常符合用户的需求。
如何开始将 Python 变量传递到我的批处理文件中?
如果您希望 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
作为进一步的编辑,这里有一个您所追求的工作示例:
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!
以下是我如何设法将变量从 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%
将此文件另存为批处理文件,如下所示:文件>另存为>name_of_file.bat 然后select:另存为文件:所有文件。
然后在 python 中调用您的批处理文件,写入:
os.system("name_of_file.bat")
确保所有这些文件都在同一个地图中以便它们工作! 好了,这对我有用,希望我可以帮助一些人发表评论,因为我搜索了很长时间才找到它是如何工作的。
PS: 我也在另外一个论坛发过贴,如果你看到这个答案两次,请不要迷惑。