【问题标题】:Python : Execute several commands in CMD in single instancePython:在单个实例中在 CMD 中执行多个命令
【发布时间】:2018-07-28 18:24:52
【问题描述】:

我试图从我的 python 程序中调用几个“阻塞”的 .bat 文件。我需要做的第一件事是更改打开 CMD 的目录。让 CMD 指向所需位置后,我将调用两个 bat 文件。我希望它们按顺序执行。

def launchAdminConsole():    
    print('Going to launch admin console')
    changeDir = 'cd dir1\\dir2\\bin \n 1.bat \n 2.bat'
    os.system("start /wait cmd /c {"+changeDir+"}")
    print("Admin Console launced")

According to this question 使用/wait 应该让命令提示符等待,但对我来说,它只是弹出并消失,所以我不确定 bat 文件是否被执行。

我也不确定我是否正确地形成了命令行代码。我用谷歌搜索了如何在 python 的单个 cmd 实例中执行多个命令,但没有一个结果对我有太大帮助,所以我自己猜测并做了上面的代码。

我需要命令提示符来打开并运行这两个 bat 文件,然后将控制权交还给 python。我不需要获取 bat 文件的输出,或者我只需要知道这两个文件是否被执行。正如我之前所说,它们都在阻止 bat 文件,因此如果运行正确,命令提示符将无法如此快速地关闭。我希望你们得到我的要求,否则下面的评论我会解释更多。

编辑: 更新我的代码如下

def launchAdminConsole2():
    print('Going to launch admin console')
    changeDir = 'cd dir1\\dir2\\bin'
    runOnce1 = '1.bat'
    runOnce2 = '2.bat'
    p = subprocess.Popen(changeDir,shell=True)
    p.wait()
    print(p.returncode)
    p = subprocess.call([changeDir, runOnce, runOnce1])
    p.wait()
    print("Admin Console launced")

更改目录的返回码返回0,但表示找不到1.bat。我确信如果目录已更改,该文件将出现在给定位置。

错误是

 File "C:\Users\nirma\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 304, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Users\nirma\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "C:\Users\nirma\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 1155, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

【问题讨论】:

    标签: python batch-file cmd


    【解决方案1】:

    您可以使用cmd.exe /c 运行多个命令,如果您将它们用& 符号s 分隔:

    cmd.exe /c "cd \dir & 1.bat & 2.bat"
    

    尝试将它传递给 subprocess.call 看看它是如何进行的。

    【讨论】:

    • 考虑到\ 实际上意味着根目录,cd \dir 建议您将目录更改为当前驱动器根目录中名为dir 的目录。这是你的意图吗?
    • 公平点。 cd 命令应该被赋予真实的路径,无论是相对的还是绝对的。
    • @Compo 用户将给出 dir 的位置。它不应该在同一个驱动器中。但是,我使用上面提到的命令组合和一些简单的 if 语句来决定我当前所在的驱动器以及选择哪个驱动器。如果有任何其他方法可以更有效地做到这一点,请告诉我
    • @NirmalRaj,该目录似乎是在您的“python 程序”中硬编码的,不是用户提供的。如果用户在过程中的某个地方提供它,那么应该有某种形式的编码来验证它是真实的和现有的路径,最好在早期的某个阶段,像在你的 python 程序中一样读取。出于这个原因,您应该专注于让您的 python 代码正确,[batch-file] 和 [cmd] 标签目前与您的问题无关,它们的添加使您的问题过于宽泛。
    • @Compo 在我在上面发布的示例中,目录是硬编码的。在我的实际代码中,我已经修改它以使用用户给定的输入。正如你所建议的那样,这使问题变得广泛,所以我将用这个问题开始另一个话题。电流是我来找的,我找到了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2017-06-16
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    相关资源
    最近更新 更多