最近很多小伙伴都在问如何从Python和2.7的生成进程中消除Windows控制台?这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Bash/WSL和Windows控制台的新功能(
最近很多小伙伴都在问如何从Python和2.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清除控制台)
- 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清除控制台)
我在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全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
input()阻止Windows 8中的其他python进程(python 3.3)
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平台,所以调试/测试可能会有点慢。
我们可能会再次出现新的错误。
你可以尝试以下变体,这是raw_input()“back port”(在Python 2.x中可以使用):
... i = eval(input("-->")) ...
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上的控制台
我在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”函数。
我们今天的关于如何从Python和2.7的生成进程中消除Windows控制台?的分享就到这里,谢谢您的阅读,如果想了解更多关于Bash / WSL和Windows控制台的新功能(Windows 10 Creato、input()阻止Windows 8中的其他python进程(python 3.3)、Python 2.7:在Windows控制台中输出utf-8、Python web浏览器输出页面到Windows上的控制台的相关信息,可以在本站进行搜索。
本文标签: