从批处理文件和任务计划程序运行脚本时,子进程运行,check_output,Popen返回空字符串

乔纳森·林

我有一个运行python脚本的批处理文件,在python脚本中,我有一个正在运行的子流程函数。

我已经试过subprocess.check_outputsubprocess.runsubprocess.Popen,所有的人都返回我使用批处理文件运行,只有当它为空字符串。

如果手动或使用IDE运行它,则可以正确获得响应。以下是代码subprocess.run

    response = subprocess.run(fileCommand, shell=True, cwd=pSetTableauExeDirectory, capture_output=True)
    self.writeInLog(' Command Response: \t' + str(response))

响应在stdout = b中''

在批处理文件中运行并从任务计划程序运行时:

命令响应:CompletedProcess(args ='tableau refreshextract --config-file“ Z:\ XXX \ tableau_config \ SampleSuperStore.txt”',returncode = 0,stdout = b'',stderr = b'')

手动运行或在IDE中运行时:

命令响应:CompletedProcess(args ='tableau refreshextract --config-file“ Z:\ XXX \ tableau_config \ SampleSuperStore.txt”',返回码= 0,stdout = b'数据源刷新已完成。\ r \ n0行已上传。\ r \ n',stderr = b'')

运行python程序的批处理文件。参数解析到python应用程序

SET config=SampleSuperStore.txt
CALL C:\XXX\AppData\Local\Continuum\anaconda3\Scripts\activate.bat
C:\XXX\AppData\Local\Continuum\anaconda3\python.exe Z:\XXX\pMainManual.py "%config%"

这是为什么??

-完整的python代码-

try:
    from pWrapper import wrapper
    import sys
except Exception as e:
    print(str(e))

class main:

    def __init__(self):
        self.tableauPath = 'C:\\Program Files\\Tableau\\Tableau 2018.3\\bin\\'
        self.tableauCommand = 'tableau refreshextract --config-file' 

    def runJob(self,argv): 
        self.manual_sProcess(argv[1])

    def manual_sProcess(self,tableauConfigFile):    
        new_wrapper = wrapper()
        new_wrapper.tableauSetup(self.tableauPath,self.tableauCommand)
        if new_wrapper.tableauConfigExists(tableauConfigFile):
            new_wrapper.tableauCommand(tableauConfigFile)           

if __name__ == "__main__":
    new_main = main()
    new_main.runJob(sys.argv)  

包装类:

def tableauCommand(self,tableauConfigFile):    
    command = self.setTableauExeDirectory + ' ' + self.refreshConfigCommand + ' "' + tableauConfigFile + '"'
    self.new_automateTableauExtract.runCommand(tableauConfigFile,command,self.refreshConfigCommand,self.tableauFilePath,self.setTableauExeDirectory)   

自动化课程:

def runCommand(self,pConfig,pCommand,pRefreshConfigCommand,pFilePath,pSetTableauExeDirectory):
    try:
        fileCommand = pRefreshConfigCommand + ' "' + pFilePath + '"'
        response = subprocess.run(fileCommand, shell=True, cwd=pSetTableauExeDirectory, capture_output=True)
        self.writeInLog(' Command Response: \t' + str(response))
    except Exception as e:
        self.writeInLog('Exception in function runCommand: ' + str(e))

更新:我最初认为bat文件是导致此问题的原因,但是当手动运行批处理文件时似乎可以工作,但是在任务计划程序上设置时却无法运行

穆罕默德·乌斯曼(Muhammad Usman)

更新

首先,如果需要anaconda-prompt通过调用activate.bat文件来运行,则只需执行以下操作:

import subprocess


def call_anaconda_venv():
    subprocess.call('python -m venv virtual.env')
    subprocess.call('cmd.exe /k /path/venv/Scripts/activate.bat')


if __name__ == "__main__":
    call_anaconda_venv()
  • 上面的代码的结果将是一个正在运行的实例anaconda-prompt需要。

现在,问题似乎像:


我有一个batch file正在运行的python脚本,在python脚本中,我有一个subprocess正在运行函数。

我已经按照要求实施了相同的程序;假设我们有

  • 批处理文件---> script.bat****包含运行python脚本命令,即test.py****

  • Python脚本文件---> test.py****包括方法使用运行命令subprocess****

  • 批处理文件---> sys_info.bat****包含将提供我的计算机的系统信息的命令****


现在,首先,script.bat包含一个将运行所需的python脚本的命令,如下所示;

python \file_path\test.py 
pause

在此,pause命令用于防止执行后自动关闭控制台。现在我们有了test.pypython脚本,其中包括subprocess运行所需命令并获取其输出的方法


from subprocess import check_output


class BatchCommands:

    @staticmethod
    def run_commands_using_subprocess(commands):
        print("Running commands from File: {}".format(commands))
        value = check_output(commands, shell=True).decode()

        return value

    @staticmethod
    def run():
        commands_from_file = "\file-path\sys_info.bat"

        print('##############################################################')
        print("Shell Commands using >>> subprocess-module  <<<")
        print('##############################################################')

        values = BatchCommands.run_commands_using_subprocess(commands_from_file)
        print(values)


if __name__ == '__main__':
    BatchCommands.run()

现在,最后,我有了一个sys_info.bat文件,其中包含用于更新计算机IP地址的命令。sys_info.bat文件中的命令如下;

systeminfo

将多个命令放在sys_info.bat文件中,然后您也可以一次运行多个命令,例如:

ipconfig/all
ipconfig/release
ipconfig/reset
ipconfig/renew
ipconfig

之前使用的文件,将所有文件directory paths,并运行该批处理文件,即script.pycommand-prompt如下;

  • 将命令提示符或终端运行为administrator

     run \file_path\script.py
    

这是在中运行批处理文件后的结果terminal

使用任务计划表运行给定批处理文件的输出,任务计划表运行子过程方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行Windows批处理文件的任务计划程序

来自分类Dev

每2分钟运行批处理和脚本文件,而不是任务计划程序

来自分类Dev

批处理文件手动运行,但不在任务计划程序中运行

来自分类Dev

尽管报告任务已完成,任务计划程序仍无法运行批处理文件

来自分类Dev

从任务计划程序运行批处理文件时,MKS工具包中的ps命令什么都不列出

来自分类Dev

如何使任务计划程序最小化运行我的批处理文件

来自分类Dev

批处理文件在任务计划程序停止后继续运行命令

来自分类Dev

运行计划的任务并执行批处理文件时,保持命令行窗口打开

来自分类Dev

用户通过任务调度程序运行 RDP 图标时如何运行批处理文件?

来自分类Dev

运行一个批处理文件,该文件计划在卸载时使用Wix安排任务

来自分类Dev

设置为无论用户是否登录都运行时,任务计划程序无法打开批处理文件

来自分类Dev

关闭时批处理运行脚本

来自分类Dev

批处理文件脚本连接字符串

来自分类Dev

批处理文件中的子字符串帮助

来自分类Dev

是否可以从批处理文件中获取运行批处理文件的任务调度程序任务的名称?

来自分类Dev

在批处理文件中运行sqlcmd可以运行,但与计划任务运行相同的批处理文件可以并且不执行任何操作

来自分类Dev

如何运行带有循环的批处理文件作为计划任务?

来自分类Dev

任务计划程序无法正确执行批处理文件

来自分类Dev

无法从任务计划程序执行批处理文件

来自分类Dev

任务计划程序无法正确执行批处理文件

来自分类Dev

从批处理文件更改当前工作目录并运行脚本

来自分类Dev

批处理文件以搜索和替换字符串

来自分类Dev

尝试获取子字符串,但程序返回空字符串

来自分类Dev

实时发现字符串时过滤tcpdump和运行脚本的输出

来自分类Dev

Python:在32位python上使用subprocess.Popen()运行批处理文件时出错

来自分类Dev

批处理文件重命名脚本交换文件名中的子字符串?

来自分类Dev

使用子字符串查看字符串是否在批处理文件中包含子字符串时出现问题

来自分类Dev

在Windows批处理文件中查找包含子字符串的字符串

来自分类Dev

批处理文件从位置到长度的字符串中获取子字符串

Related 相关文章

  1. 1

    运行Windows批处理文件的任务计划程序

  2. 2

    每2分钟运行批处理和脚本文件,而不是任务计划程序

  3. 3

    批处理文件手动运行,但不在任务计划程序中运行

  4. 4

    尽管报告任务已完成,任务计划程序仍无法运行批处理文件

  5. 5

    从任务计划程序运行批处理文件时,MKS工具包中的ps命令什么都不列出

  6. 6

    如何使任务计划程序最小化运行我的批处理文件

  7. 7

    批处理文件在任务计划程序停止后继续运行命令

  8. 8

    运行计划的任务并执行批处理文件时,保持命令行窗口打开

  9. 9

    用户通过任务调度程序运行 RDP 图标时如何运行批处理文件?

  10. 10

    运行一个批处理文件,该文件计划在卸载时使用Wix安排任务

  11. 11

    设置为无论用户是否登录都运行时,任务计划程序无法打开批处理文件

  12. 12

    关闭时批处理运行脚本

  13. 13

    批处理文件脚本连接字符串

  14. 14

    批处理文件中的子字符串帮助

  15. 15

    是否可以从批处理文件中获取运行批处理文件的任务调度程序任务的名称?

  16. 16

    在批处理文件中运行sqlcmd可以运行,但与计划任务运行相同的批处理文件可以并且不执行任何操作

  17. 17

    如何运行带有循环的批处理文件作为计划任务?

  18. 18

    任务计划程序无法正确执行批处理文件

  19. 19

    无法从任务计划程序执行批处理文件

  20. 20

    任务计划程序无法正确执行批处理文件

  21. 21

    从批处理文件更改当前工作目录并运行脚本

  22. 22

    批处理文件以搜索和替换字符串

  23. 23

    尝试获取子字符串,但程序返回空字符串

  24. 24

    实时发现字符串时过滤tcpdump和运行脚本的输出

  25. 25

    Python:在32位python上使用subprocess.Popen()运行批处理文件时出错

  26. 26

    批处理文件重命名脚本交换文件名中的子字符串?

  27. 27

    使用子字符串查看字符串是否在批处理文件中包含子字符串时出现问题

  28. 28

    在Windows批处理文件中查找包含子字符串的字符串

  29. 29

    批处理文件从位置到长度的字符串中获取子字符串

热门标签

归档