subprocess

Python Subprocess: how/when do they close file?

独自空忆成欢 提交于 2020-04-18 04:01:42
问题 I wonder why subprocesses keep so many files open. I have an example in which some files seem to remain open forever (after the subprocess finishes and even after the program crashes). Consider the following code: import aiofiles import tempfile async def main(): return [await fds_test(i) for i in range(2000)] async def fds_test(index): print(f"Writing {index}") handle, temp_filename = tempfile.mkstemp(suffix='.dat', text=True) async with aiofiles.open(temp_filename, mode='w') as fp: await fp

How does subprocess.Popen works with shell=False on windows?

£可爱£侵袭症+ 提交于 2020-04-18 03:48:57
问题 I'd like to understand how subprocess.Popen works on windows when shell=False . In particular, how is the environment or variable expansion taken into consideration by the underlying algorithm? Consider the below simple test: import os import subprocess import textwrap def truncate(string, width): if len(string) > width: string = string[:width - 3] + '...' return string if __name__ == '__main__': index = 0 commands = [ ["where", "find.exe"], "where find.exe", [r"c:\windows\system32\where.exe"

How does subprocess.Popen works with shell=False on windows?

試著忘記壹切 提交于 2020-04-18 03:48:43
问题 I'd like to understand how subprocess.Popen works on windows when shell=False . In particular, how is the environment or variable expansion taken into consideration by the underlying algorithm? Consider the below simple test: import os import subprocess import textwrap def truncate(string, width): if len(string) > width: string = string[:width - 3] + '...' return string if __name__ == '__main__': index = 0 commands = [ ["where", "find.exe"], "where find.exe", [r"c:\windows\system32\where.exe"

Write to a Python subprocess's stdin without communicate()'s blocking behavior

走远了吗. 提交于 2020-04-16 07:12:39
问题 How do I make this a non-blocking call? osd_cat accepts input only as a PIPE which need p.communicate() call making the process to block. Is there any other way to set stdin in Popen ? p = subprocess.Popen(('osd_cat', '-d', '{}'.format(interval)), stdin=subprocess.PIPE) p.communicate(message) 回答1: The p.communicate method is a one-shot deal in terms of sending data to the process. Instead, write directly to p.stdin. If you want to get output, you can read lines from p.stdout. Make sure you

Custom Popen.communicate method gives wrong output

百般思念 提交于 2020-04-16 02:58:48
问题 Let's start by considering this code: proc_stdin.py import sys if __name__ == '__main__': for i, line in enumerate(sys.stdin): sys.stdout.write(line) test.py import subprocess def run_bad(target, input=None): proc = subprocess.Popen( target, universal_newlines=True, shell=True, stderr=subprocess.STDOUT, stdin=subprocess.PIPE if input else subprocess.DEVNULL, stdout=subprocess.PIPE, ) if input: proc.stdin.write(input) proc.stdin.flush() proc.stdin.close() lines = [] for line in iter(proc

pycharm and subprocess - what works in console doesn't work in Pycharm

你说的曾经没有我的故事 提交于 2020-04-10 03:23:51
问题 Pycharm's interpreter seems to have stopped understanding some of my console commands. It keeps recognizing default shell commands but doesn't recognize installed utilities. For example, subprocess module understands touch command but doesn't understand heroku command. The funny thing is, when I enter the same string into the console, with the same interpreter (from the same virtualenv), everything works fine. A visual example: It stopped working a couple days ago, and before that everything

网络编程

限于喜欢 提交于 2020-04-07 21:16:35
一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢? 这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。 但是当你的a.py和b.py分别在不同电脑上的时候,你要怎么办呢? 类似的机制有计算机网盘,qq等等。我们可以在我们的电脑上和别人聊天,可以在自己的电脑上向网盘中上传、下载内容。这些都是两个程序在通信。 回到顶部 二.软件开发的架构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~ 1.C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 2.B/S架构 B/S即:Browser与Server

suprocess模块

扶醉桌前 提交于 2020-04-01 06:02:15
suprocess模块 import subprocess ''' sh-3.2# ls /Users/egon/Desktop |grep txt$ mysql.txt tt.txt 事物.txt ''' res1=subprocess.Popen('ls /Users/jieli/Desktop',shell=True,stdout=subprocess.PIPE) res=subprocess.Popen('grep txt$',shell=True,stdin=res1.stdout, stdout=subprocess.PIPE,stderr=subprocess.PIPE) # 此处是否为utf-8要看系统的默认编码,必须输入系统编码格式 print(res.stdout.read().decode('utf-8')) print(res.stderr.read().decode('utf-8')) #等同于上面,但是上面的优势在于,一个数据流可以和另外一个数据流交互,可以通过爬虫得到结果然后交给grep res1=subprocess.Popen('ls /Users/jieli/Desktop |grep txt$',shell=True,stdout=subprocess.PIPE) print(res1.stdout.read().decode('utf-8')

网络基础:socket模块

﹥>﹥吖頭↗ 提交于 2020-04-01 05:36:21
socket:   套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 基于TCP协议的socket:tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 socket参数详解: socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 创建socket对象的参数说明: family 地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。 (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。 SOCK_STREAM 是基于TCP的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料传送。 SOCK_DGRAM 是基于UDP的,无保障的面向消息的socket,多用于在网络上发广播信息。 proto 协议号通常为零,可以省略,或者在地址族为AF_CAN的情况下,协议应为CAN_RAW或CAN_BCM之一。 fileno

python-进程与线程 六

不想你离开。 提交于 2020-03-27 23:40:48
Subprocess 模块:   作用1:它通过主进程,生成一个子进程,来执行一个操作系统命令,然后返回执行结果。这个结果可以存储到变量里,做后续使用   作用2:某个命令指向之后的结果,还可以传递给另外一个命令   在CMD中 >>> import os >>> a = os.system('dir') 驱动器 C 中的卷是 OS 卷的序列号是 DC49-453A C:\Users\admin\PycharmProjects\test1 的目录 2020/03/27 20:16 <DIR> . 2020/03/27 20:16 <DIR> .. 2020/03/27 20:20 <DIR> .idea 2020/03/26 09:33 1,091 generator.py 2020/03/27 16:31 502 hello.py 2020/03/20 23:16 426 index.html 2020/03/16 08:03 <DIR> parent_directory 2020/03/27 20:16 270 test1.py 2020/02/11 11:32 <DIR> venv 2020/03/16 15:16 <DIR> __pycache__ 4 个文件 2,289 字节 6 个目录 113,394,843,648 可用字节 >>> a # 无法获取上面的数据