【问题标题】:python subprocess use cmd for print() commandspython子进程使用cmd打印()命令
【发布时间】:2018-05-08 20:01:35
【问题描述】:

我有一个 python 代码应该在其他文件中执行另一个代码。

由于我现在没有时间解释的原因,我需要使用subprocess-module 或类似的东西。我的功能应该使用我的第二个文件中的print- 命令应该给出它们的输出的任何窗口。这是我的文件:

maincode.py:

#import subprocess

def startFileInNewProcess(filename):
    proc = subprocess.Popen(["python", filename], shell=True)

startFileInNewProcess("mysecondfile.py")

mysecondfile.py:

import os
print os.getcwd()

据我了解一些关于 SO 的文章,参数shell=True 应该使用mysecondfile.py 的输出创建一个新窗口。这不会发生!任何人都可以解释原因并请提出改进​​建议...

【问题讨论】:

  • 我在 debian 系统上,更详细:Raspbian
  • 不,shell=True 不会创建新窗口。它只是意味着将通过shell执行指定的命令。见docs.python.org/3/library/…
  • 不,shell=True 导致第一个参数转换为字符串并用作sh -c 的参数。如果你传递一个列表,你不想要shell=True
  • 这里有一些其他有用的链接,相关问题linklink

标签: python subprocess


【解决方案1】:

在 windows 上,您可以打开一个新的 cmd 窗口并在其上执行代码

from subprocess import Popen
from subprocess import Popen, CREATE_NEW_CONSOLE

def startFileInNewProcess(filename):
    terminal='cmd'
    command='Python'
    command=terminal +' '+ '/K' +' '+command+' '+filename
    #/K keeps the command prompt open when execution takes place
    #CREATE_NEW_CONSOLE opens a new console
    proc = subprocess.Popen(command,creationflags=CREATE_NEW_CONSOLE)

【讨论】:

  • 如上所述,我在linux上,但感谢您的建议。
【解决方案2】:

参数shell=True 只会在shell 中执行命令,在您系统的默认shell 中/bin/sh。要启动一个新的终端窗口,您需要指定终端:

subprocess.Popen(["xterm", "python"])

以上行打开一个新的 xterm 终端窗口并在其中执行python 命令。

【讨论】:

  • 我将您的建议应用于我的代码并假设filename 是可执行的:subprocess.Popen(["xterm", "./"+filename]) 这不会等到我按下回车键或类似的东西,而是在窗口结束后立即对窗口进行编码程序...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多