GVKun编程网logo

如何从Python(2.7)的生成进程中消除Windows控制台?(python清除控制台)

8

最近很多小伙伴都在问如何从Python和2.7的生成进程中消除Windows控制台?这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Bash/WSL和Windows控制台的新功能(

最近很多小伙伴都在问如何从Python2.7的生成进程中消除Windows控制台?这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Bash / WSL和Windows控制台的新功能(Windows 10 Creato、input()阻止Windows 8中的其他python进程(python 3.3)、Python 2.7:在Windows控制台中输出utf-8、Python web浏览器输出页面到Windows上的控制台等相关知识,下面开始了哦!

本文目录一览:

如何从Python(2.7)的生成进程中消除Windows控制台?(python清除控制台)

如何从Python(2.7)的生成进程中消除Windows控制台?(python清除控制台)

我在Windows上使用python 2.7使用dcraw和PIL自动执行批RAW转换。

问题是,每当我运行dcraw时(每隔几秒钟发生一次),我都会打开一个Windows控制台。如果我以.py格式运行脚本,那么它只会打开主窗口,所以不会那么令人讨厌,但是我更希望仅显示GUI。

我像这样涉及到它:

args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile]proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE)ppm_data, err = proc.communicate()image = Image.open(StringIO.StringIO(ppm_data))

感谢里卡多·雷耶斯

次要修订到配方,在2.7看来,你需要得到STARTF_USESHOWWINDOW来自_subprocess(您也可以使用pywin32,如果你想要的东西,可能是有点不容易改变),所以为后人:

suinfo = subprocess.STARTUPINFO()suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOWproc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)

答案1

小编典典

调用Popen时,需要设置 startupinfo 参数。

这是来自Activestate.com食谱的示例:

import subprocessdef launchWithoutConsole(command, args):    """Launches ''command'' windowless and waits until finished"""    startupinfo = subprocess.STARTUPINFO()    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait()if __name__ == "__main__":    # test with "pythonw.exe"    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])

Bash / WSL和Windows控制台的新功能(Windows 10 Creato

Bash / WSL和Windows控制台的新功能(Windows 10 Creato

总结

以上是小编为你收集整理的Bash \/ WSL和Windows控制台的新功能(Windows 10 Creato全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

input()阻止Windows 8中的其他python进程(python 3.3)

input()阻止Windows 8中的其他python进程(python 3.3)

在一个多线程的跨平台python3.3应用程序上,我遇到了一些我不期待的奇怪的行为,我不确定是预期的。问题是Windows 8调用一个线程中的input()方法阻止其他线程,直到它完成。我已经在三个Linux,两个Windows 7和一个Windows 8计算机上测试了下面的示例脚本,这种行为只在Windows 8计算机上观察到。这是Windows 8的预期行为吗?

test.py:

import subprocess,threading,time

def ui():
    i = input("-->")
    print(i)

def loop():
    i = 0
    f = 'sky.{}'.format(i)
    p = subprocess.Popen(['python','copy.py','sky1',f])
    t = time.time()
    while time.time() < t+15:
        if p.poll() != None:
            print(i)
            time.sleep(3)
            i+=1
            f = 'sky.{}'.format(i)
            p = subprocess.Popen(['python',f])
    p.terminate()
    p.wait()

def start():
    t1 = threading.Thread(target=ui)
    t2 = threading.Thread(target=loop)
    t1.start()
    t2.start()
    return t2

t2 = start()
t2.join()
print('done')

copy.py:

import shutil
import sys

src = sys.argv[1]
dst = sys.argv[2]

print('copying \'{0}\' to \'{1}\''.format(src,dst))
shutil.copy(src,dst)

更新:
在尝试其中一个建议时,我意识到我赶上了一个结论,缺少一些明显的东西。对于开始虚假的开始,我深表歉意。

由于Schollii建议只使用线程(没有子进程或python文件)导致所有线程前进,所以问题实际上是在一个python进程中使用input()将导致其他python进程阻止/不运行(我不知道什么正在进行)。此外,它似乎只是受影响的python进程。如果我使用上面显示的相同代码(通过一些修改)来执行具有subprocess.Popen的非python可执行文件,它们将按预期运行。

总结:

>使用子进程来执行非python可执行文件:按预期方式工作,并且没有对input()的任何调用。
>使用子进程执行python可执行文件:如果在原始进程中调用input(),则已创建的进程似乎不会运行。
>使用子进程在新进程中调用input()而不是原始进程来创建python进程:对input()的调用将阻止“main”进程产生的所有python进程。

侧面注意:我没有Windows 8平台,所以调试/测试可能会有点慢。

因为Python 3.0-3.2中的输入有几个问题,所以这个方法几乎没有变化。

我们可能会再次出现新的错误。

你可以尝试以下变体,这是raw_input()“back port”(在Python 2.x中可以使用):

...
i = eval(input("-->"))
...

Python 2.7:在Windows控制台中输出utf-8

Python 2.7:在Windows控制台中输出utf-8

我们说

s = u"testu0627u0644u0644u0647 u0623u0643u0628u0631u7206u767Au043Eu043Bu043Eu043Bu043E"

如果我尝试直接打印它,

>>> print s Traceback (most recent call last): File "<stdin>",line 1,in <module> UnicodeEncodeError: 'cp932' codec can't encode character u'u0627' in position 4: illegal multibyte sequence

所以我把这个控制台从Python变成了UTF-8(否则它不会理解我的input)。

import win32console win32console.SetConsoleOutputCP(65001) win32console.SetConsoleCP(65001)

然后输出编码为utf-8的string,因为Python不知道chcp 65001是UTF-8(一个已知的bug )。

dl / win32 loaderror

HBITMAP从位

如何从其他窗口代码中将已经存在的打开窗口置于其他窗口的顶部?

在Windows上安装协议缓冲区

在VB.net中dynamic添加一个用户控件

>>> print s.encode('utf-8') testالله أكبر爆発ололоTraceback (most recent call last): File "<stdin>",in <module> IOError: [Errno 0] Error

正如你所看到的,它打印成功,直到它命中一个换行符,然后它会抛出一个IOError。

以下解决方法工作:

def safe_print(str): try: print str.encode('utf-8') except: pass print >>> safe_print(s) testالله أكبر爆発ололо

但是一定有更好的办法。 有什么build议么?

在Windows XP Embedded上,禁用每个控件的C#Winforms应用程序中的右键单击(按住)

JavaFX淡出舞台并closures

无法安装JDK 7

Scrapy返回相同的信息80+次

.Net使用特殊文件夹符号

在python utf8 windows中 搜索带来的第一个结果是在Windows XP上使用UTF8打印python的问题,这个控制台描述了从Python打印Windows中的utf8的问题。

我没有在Windows上测试它,但在这里你可以得到一个小的初始化脚本为win / linux来正确设置输出编码,包括日志接口等。该模块还使输出颜色(包括更新'日志'界面)? 但是你可以很容易地把它们关掉:-)。

如何调用非彩色变体:

#!/usr/bin/env python # -*- coding: utf-8 -*- from setupcon import setup_console setup_console('utf-8',False)

和彩色变体:

import setupcon setupcon.setup_console() import logging #... if setupcon.ansi: logging.getLogger().addHandler(setupcon.ColoredHandler())

如果解决方案适用于您,您可以阅读这里的文档: http : //habrahabr.ru/blogs/python/117236/ ,在俄罗斯,或我/有人可以翻译它为您需求:-)。

Python web浏览器输出页面到Windows上的控制台

Python web浏览器输出页面到Windows上的控制台

我在Windows上编写一个PyGTK应用程序,在一个函数中,我试图用webbrowser模块打开一个网页。 它应该是世界上最简单的东西,而不是在浏览器中打开,而是将页面的HTML源打印到控制台。 有谁知道为什么会发生?

有问题的代码:

oauthURL = ("http://api.twitter.com/oauth/authorize?oauth_token=" + requestToken) webbrowser.open(oauthURL,2,True)

我刚刚在我的Arch Linux笔记本电脑上testing过,而且工作正常,所以这是Windows特有的问题。 也许Python找不到浏览器来使用?

MapViewOfFile中的信号量的最佳方法 – C ++

python,windows 7,不能导入cv2

在login菜单上运行C#应用程序

UWP维护ToggleSwitch.IsOn状态

从Apache下载的Zip文件 – 在Ubuntu中确定,在Windows 7中无效

如何通过桌面程序设置win8的吐司图标

使用fgetc / getc(Windows)后无法写入文件

有没有办法在Windows上的链接时重新定义malloc?

WinRT gridview添加瓦片

如何在进程中使用msinfo32.exe命令行?

通常要做的事情(在Windows上)是使用os.startfile(url) ,它启动http url的默认应用程序。 您可以通过在命令提示符处键入start http://www.example.com来检查这是做什么的。 如果这有相同的效果,那么您知道问题是什么,并且您应该在Windows中重新配置您的默认浏览器。

这种行为可以被用户通过broWSER环境变量覆盖,所以你可能想检查一下,如果上述没有帮助。

这个代码片段可以处理以跨平台的方式打开一个网页:

if sys.platform[:3] == 'win': try: os.startfile(oauthURL) except WindowsError as why: # your error handling code print(why) else: webbrowser.open(oauthURL,True)

它基于IDLE的EditorWindow.py“python_docs”函数。

我们今天的关于如何从Python2.7的生成进程中消除Windows控制台?的分享就到这里,谢谢您的阅读,如果想了解更多关于Bash / WSL和Windows控制台的新功能(Windows 10 Creato、input()阻止Windows 8中的其他python进程(python 3.3)、Python 2.7:在Windows控制台中输出utf-8、Python web浏览器输出页面到Windows上的控制台的相关信息,可以在本站进行搜索。

本文标签: