相关疑难解决方法(0)

向Ubuntu面板添加变化的图标

在Ubuntu(Gnome)面板中添加和更改图标的最简单方法是什么?我正在寻找像shell脚本这样简单的东西,但我不仅限于此。如果是更好或更简单的方法,将为此编写程序。

这个想法是创建一个脚本/程序来监视某些情况(例如,安装点的可用性,互联网连接的可用性),并更改图标的状态以反映当前状态。

linux ubuntu gnome panel

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

用shell = True纠正子进程的咒语以获得输出而不是挂起

在子进程调用中,我想使用shell = True,以便它对路径名(下面的代码)进行通配,但是这会产生令人讨厌的副作用,即subprocess生成子进程(必须是`communication()d/poll ()ed/wait()ed/terminate()d/kill()ed/whatevah).

(是的我知道globing也可以用fnmatch/glob来完成,但是请告诉我子进程的'正确'用法,即获得stdout和停止子进程的最小咒语.)

这工作正常(返回输出):

subprocess.check_output(['/usr/bin/wc','-l','[A-Z]*/[A-Z]*.F*'], shell=False)

但这就挂了

subprocess.check_output(['/usr/bin/wc','-l','[A-Z]*/[A-Z]*.F*'], shell=True)

(PS:严重加剧你不能告诉子进程你想要一些但不是所有 shell功能,例如通配但不产生.我认为有一个值得的PEP,如果有人关心评论,即传入一个布尔元组,或一个二元标志)

(PPS:你是否通过的成语subprocess...(cmdstring.split() or [...])只是一个微不足道的习惯性差异.我说番茄,你说tomay-to.在我的情况下,动机是命令是固定的,但我可能想要多次调用它有区别文件规范).

python subprocess glob

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

通过Python从Android访问LogCat

是否可以读取在python中通过LogCat发送的信息?

我有一个用java编写的程序.它发送的每个并条标记:"Fps:"消息:数字

我希望这条消息能够触发我可以在我的python脚本中捕获的事件,这样我就可以绘制一个fps-meter.

python events android logcat android-logcat

5
推荐指数
2
解决办法
8126
查看次数

具有超时的异步子进程

我在Python 3中生成具有超时的异步子进程时遇到问题.

我想要实现的目标:我希望异步生成多个进程而不等待结果,但我还要确保每个生成的进程都会在给定的超时内结束.

我在这里发现了类似的问题:在Python中使用模块'subprocess'和超时以及异步后台进程?但他们没有解决我的问题.

我的代码看起来像这样.我有使用模块'subprocess'和超时建议的Command类:

class Command(object):
  def __init__(self, cmd):
    self.cmd = cmd
    self.process = None

  def run(self, timeout):
    def target():
      print('Thread started')
      args = shlex.split(self.cmd)
      self.process = subprocess.Popen(args, shell=True)
      self.process.communicate()
      print('Thread finished')

    thread = threading.Thread(target=target)
    thread.start()

    thread.join(timeout)
    if thread.is_alive():
      print('Terminating process')
      self.process.terminate()
      thread.join()
Run Code Online (Sandbox Code Playgroud)

然后当我想要产生子进程时:

for system in systems:
  for service in to_spawn_system_info:
    command_str = "cd {0} && python proc_ip.py {1} {2} 0 2>>{3}".format(home_dir,
        service, system, service_log_dir)
    command = Command(command_str)
    command.run(timeout=60)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,输出似乎等待每个命令生成并结束.我明白了

Thread …
Run Code Online (Sandbox Code Playgroud)

python subprocess asynchronous python-3.x

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

杀死子进程后外壳挂起

我知道在 SO 上有很多类似的问题,比如这个这个,也许还有更多,但似乎没有一个适用于我的特定情况。我对subprocess.Popen()工作原理缺乏了解也无济于事。

我想要实现的是:启动一个子进程(一个命令行收音机播放器),它也向终端输出数据,也可以接收输入——等待一段时间——终止子进程——退出shell。我在 OSX 10.9 上运行 python 2.7

案例 1. 这将启动广播播放器(但仅限音频!),终止进程,退出。

import subprocess
import time

p = subprocess.Popen(['/bin/bash', '-c', 'mplayer http://173.239.76.147:8090'],
                     stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=False,
                     stderr=subprocess.STDOUT)
time.sleep(5)
p.kill()
Run Code Online (Sandbox Code Playgroud)

案例 2. 这将启动收音机播放器,输出诸如收音机名称、歌曲、比特率等信息并接受输入。它终止子进程,但它从不存在 shell,即使使用“Ctrl-C”,终端也无法使用。

p = subprocess.Popen(['/bin/bash', '-c', 'mplayer http://173.239.76.147:8090'],
                     shell=False)
time.sleep(5)
p.kill()
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?我什至在想,如果没有其他选择,是否有可能为子进程打开一个slave-shell(当然这也是我不知道的事情)。谢谢!

python subprocess

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

尽管进程已死,为什么仍会收到子进程资源警告?

我一直在尝试找出如何启动不同的子流程实例,然后杀死它们然后创建新的实例。父python进程从不执行,只会杀死子进程。我在SO上跟踪了很多链接,但是一旦父python进程结束,我就会不断收到以下消息:

F/Users/Lucifer/miniconda3/envs/rltp/lib/python3.6/subprocess.py:761: ResourceWarning: subprocess 40909 is still running ResourceWarning, source=self)
Run Code Online (Sandbox Code Playgroud)

这似乎很有趣,因为我做到了,ps但是却一无所获:

  PID TTY           TIME CMD
 7070 ttys001    0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp Lucifer
 7072 ttys001    0:00.61 -bash
17723 ttys002    0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp Lucifer
17725 ttys002    0:00.06 -bash
38586 ttys002    0:00.16 sertop --no_init
Run Code Online (Sandbox Code Playgroud)

我只想开始一个过程:

self.serapi = subprocess.Popen(['sertop','--no_init'],
    stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
    preexec_fn=os.setsid,shell=True
    ,)
Run Code Online (Sandbox Code Playgroud)

并杀死它:

    os.killpg(os.getpgid(self.serapi.pid), signal.SIGTERM)
Run Code Online (Sandbox Code Playgroud)

上面的代码本质上是从最上面的答案复制的:

如何终止以shell = True启动的python子进程

但我不确定为什么会收到此消息。我是否成功终止了子进程?我计划启动并杀死其中许多人。


注意我不知道或不需要shell=True。我只是复制了那个,就是我发布的答案/问题的答案。我宁愿没有那个参数。


根据我尝试的答案:

def kill(self):
    self.serapi.wait()
    #self.serapi.kill()
    self.serapi.terminate()
    #os.killpg(os.getpgid(self.serapi.pid), signal.SIGTERM)
    #self.serapi.wait()
Run Code Online (Sandbox Code Playgroud)

以及上述内容的不同排列方式,但似乎没有任何效果。有什么建议吗?

python subprocess kill kill-process

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

我们如何杀死 python 中 subprocess.call() 函数产生的进程?

我在 python 中用 subprocess.call 创建了一个进程

import subprocess
x = subprocess.call(myProcess,shell=True)
Run Code Online (Sandbox Code Playgroud)

我想杀死这两个进程,即 shell 及其子进程(我的进程)。

使用 subprocess.call() 我只得到进程的返回码

有人能帮忙吗 ?

python python-2.7

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

如果已存在浏览器窗口,则process.terminate()不适用于chrome/firefox子进程

我正在使用以下命令启动子进程:

p=subprocess.Popen(["google-chrome","--new-window","http://www.hckrnews.com"])
Run Code Online (Sandbox Code Playgroud)

我需要在一段时间后终止这个过程,所以我正在使用:

time.sleep(t)
p.terminate()
Run Code Online (Sandbox Code Playgroud)

仅当浏览器的实例尚未打开时,此方法才有效.如果已存在浏览器窗口,则会打开一个新窗口,但不会在指定时间后终止.

我也尝试了这个问题中给出的方法,但是在已经存在的窗口的情况下也不起作用.

python subprocess kill-process

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

如何杀死在Python中使用subprocess.call调用的子进程?

我正在使用以下命令

subprocess.call(cmd, shell=True)
Run Code Online (Sandbox Code Playgroud)

该命令不会自动终止。如何杀死它?

python

4
推荐指数
2
解决办法
6693
查看次数

杀死 shell=True 进程导致 ResourceWarning: subprocess is still running

遵循如何终止使用 shell=True 启动的 python 子进程的建议

我有一个过程,我从以下开始

process = subprocess.Popen(my_cmd, shell=True, executable='/bin/bash', preexec_fn=os.setsid)
Run Code Online (Sandbox Code Playgroud)

my_cmd 的形式为 some_cmd_that_periodically_outputs_to_stdout | grep "some_fancy_regex" > some_output_file.txt

我用以下命令终止进程

os.killpg(os.getpgid(process.pid), signal.SIGKILL)
Run Code Online (Sandbox Code Playgroud)

杀死后,我收到以下警告

ResourceWarning: subprocess XXX is still running
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此警告?

python subprocess

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