小编Nis*_*n.H的帖子

windows和linux中的subprocess.Popen和shlex.split格式

我正在编写一个包装器来通过Python(2.7.2)自动化一些Android ADB shell命令.因为,在某些情况下,我需要异步运行命令,我使用进程.Popen方法来发出shell命令.

我遇到[command, args]Popen方法参数格式化的问题,其中需要命令/ args拆分在Windows和Linux之间是不同的:

# sample command with parameters
cmd = 'adb -s <serialnumber> shell ls /system'

# Windows:
s = subprocess.Popen(cmd.split(), shell=False) # command is split into args by spaces

# Linux:
s = subprocess.Popen([cmd], shell=False) # command is a list of length 1 containing whole command as single string
Run Code Online (Sandbox Code Playgroud)

我尝试使用shlex .split(),带有posix标志:

# Windows
posix = False
print shlex.split(cmd, posix = posix), posix
# Linux
posix = True
print shlex.split(cmd, …
Run Code Online (Sandbox Code Playgroud)

python subprocess shlex

6
推荐指数
2
解决办法
2万
查看次数

ObjectProperty类的用法

我刚开始学习kivy,我对ObjectProperty类的用法以及如何将None作为参数感到非常困惑。有人可以解释一下吗?我在kivy教程中找到了它:

class PongGame(Widget):
    ball = ObjectProperty(None)

    def update(self, dt):
        self.ball.move()

        # bounce off top and bottom
        if (self.ball.y < 0) or (self.ball.top > self.height):
            self.ball.velocity_y *= -1

        # bounce off left and right
        if (self.ball.x < 0) or (self.ball.right > self.width):
            self.ball.velocity_x *= -1
Run Code Online (Sandbox Code Playgroud)

python kivy

5
推荐指数
1
解决办法
7647
查看次数

在multiprocessing.Process下的Python多处理RemoteManager

我正在尝试在管理进程下启动数据队列服务器(以便以后可以将其转换为服务),并且虽然数据队列服务器功能在主进程中正常工作,但它在使用创建的进程中不起作用multiprocessing.Process.

dataQueueServer和dataQueueClient代码基于此处多处理模块文档中的代码.

当自己运行时,dataQueueServer运行良好.然而,在使用中运行时multiprocessing.Processstart()mpquueue,它不工作(当与客户端进行测试).我正在使用dataQueueClient而没有更改来测试这两种情况.

代码确实达到了serve_forever两种情况,所以我认为服务器正在运行,但有些东西阻止它在mpqueue情况下与客户端进行通信.

我已经serve_forever()在线程下放置了运行该部件的循环,因此它可以停止.

这是代码:

mpqueue#这是尝试在子进程中生成服务器的"管理器"进程

import time
import multiprocessing
import threading
import dataQueueServer

class Printer():
    def __init__(self):
        self.lock = threading.Lock()
    def tsprint(self, text):
        with self.lock:
            print text

class QueueServer(multiprocessing.Process):
    def __init__(self, name = '', printer = None):
        multiprocessing.Process.__init__(self)
        self.name = name
        self.printer = printer
        self.ml = dataQueueServer.MainLoop(name = 'ml', printer = self.printer)

    def run(self):
        self.printer.tsprint(self.ml)
        self.ml.start()

    def stop(self):
        self.ml.stop() …
Run Code Online (Sandbox Code Playgroud)

python queue multiprocessing

4
推荐指数
1
解决办法
4710
查看次数

为什么gevent.socket破坏multiprocessing.connection的身份验证

我有一个应用程序,同时使用grequestsmultiprocessing.managers用于IPC通信和异步通信的RESTful HTTP上的组合。

似乎grequests在使用gevent.monkeypatch_all()方法中,破坏multiprocessing.connectionmultiprocessing.manager.SyncManager类及其派生类使用的模块。

这显然不是一个孤立的问题,而是影响任何使用情况下实现multiprocessing.connetion,比如multiprocessing.pool,例如。

深入研究中的代码gevent/monkey.py,我发现与stdlib socket模块的交换gevent.socket是造成损坏的原因。可以在gevent/monkey.py以下patch_socket()功能的第115行找到:

def patch_socket(dns=True, aggressive=True):
    """Replace the standard socket object with gevent's cooperative sockets.
    ...
    _socket.socket = socket.socket # This line breaks multiprocessing.connection!
    ...
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么此交换中断multiprocessing.connection,并且使用gevent.socket代替stdlib的socket模块有什么优势?也就是说,不修补socket模块会导致什么性能损失(如果有)?

追溯

Traceback (most recent call last):
  File "clientWithGeventMonkeyPatch.py", line 49, in <module>
    client = GetClient(host, port, …
Run Code Online (Sandbox Code Playgroud)

python connection multiprocessing monkey gevent

4
推荐指数
1
解决办法
1923
查看次数

标签 统计

python ×4

multiprocessing ×2

connection ×1

gevent ×1

kivy ×1

monkey ×1

queue ×1

shlex ×1

subprocess ×1