【问题标题】:Passing a Python Variable to Batch File [duplicate]将 Python 变量传递给批处理文件 [重复]
【发布时间】:2017-08-13 04:10:02
【问题描述】:

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

@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,但似乎没有一个答案对我有用。以下是我也尝试过的一些链接:Example 1Example 2。我也尝试过其他方法,但它们似乎非常符合用户的需求。

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

【问题讨论】:

    标签: python batch-file subprocess python-3.6


    【解决方案1】:

    这是我设法将变量从 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 然后选择:另存为文件:所有文件。

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

    os.system("name_of_file.bat")
    

    确保所有这些文件都在同一个地图中,以便它们工作! 好了,这对我有用,希望我可以通过此评论帮助一些人,因为我搜索了很长时间才找到它是如何工作的。

    PS:我也在另一个论坛发过帖子,所以看到这个答案两次不要迷惑。

    【讨论】:

      【解决方案2】:

      如果您希望 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!
      

      【讨论】:

      • 我收到无效的语法错误(除了缺少的括号)
      • 是的,已编辑。我搞砸了:(基本上,外壳在方括号之外。
      • 所以它的运行方式与我的代码相同:subprocess.call([filepath, 'arg1']) 但我无法判断 .bat 文件是否已运行或有任何影响?在 Python 中不显示。
      • 好的,如果你也想看输出...item = subprocess.Popen([filepath, 'arg1'], shell=True, stdout=subprocess.PIPE)那么你可以有print item.stdout
      • 我们(主要是你)正在接近!我得到<_io.BufferedReader name=3>。非常感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2015-05-12
      • 2015-12-19
      相关资源
      最近更新 更多