Articles of python

Python:在Linux上启动新的terminal并等待它完成/退出

与我的另一个问题相同的情况: Python:在Windows上启动新的命令提示符并等待它完成/退出,除非我需要它在Linux上工作。 如果你不想阅读另一个问题:我想打开一些新的terminal窗口,并且每个都执行一个命令,我希望父级python程序等到所有terminal窗口closures。 这样做: os.system("gnome-terminal -e {command}") 打开一个新的terminal窗口,但程序不会等待。 使用p = Popen() p.wait() p = Popen()和p.wait()不起作用,因为gnome-terminal命令立即完成。

Python脚本在打印之前打印os.system的输出

我有一个python脚本test.py: print "first" import os os.system("echo second") 在Linux命令行我执行 python test.py 它返回: first second 然后我执行 python test.py > test.out; cat test.out 哪个返回 second first 如何redirect输出使得os.system调用在打印语句之前打印?

Python:检查两个Linuxpath是否在同一个物理磁盘上

现在我使用os.stat(path).st_dev来获取设备ID。 但是对于同一个物理驱动器上的逻辑磁盘,id似乎是不同的。 所以它实际上并不适合我。 有没有更好的或直接的解决scheme呢。

python脚本在作为背景运行时会看到回溯

我有我的服务器上运行这样的python脚本: python script.py & 脚本工作正常,但不断向脚本添加新的东西,并重新运行它,有些日子没有任何问题运行几天,但有时脚本停止运行( 不是内存不足),但自从我开始脚本作为背景我不知道如何检查导致脚本停止运行的exception或错误。 我在一个运行在亚马逊的Ubuntu服务器上。 有关如何处理这种不便的build议?

从上传中创build新文件

我陷入了一个小问题: 我有一个网站来pipe理不同用户的video文件。 每个用户都可以将video上传到我不想更改的个人文件夹,因为我不想混淆来自不同用户的文件。 上传video文件后,我会调用一个应创build缩略图的subprocess 。 subprocess由于ffmpeg中的错误而失败,似乎与缺less写入权限有关。 上传的文件和包含的文件夹属于www-data。 代码: command = ("ffmpeg -ss 00:00:10 -i %s -dframes 1 %s -y" % (video_path, image_path)).split() subprocess.call(command) FFMPEG似乎作为一个不同的用户运行,因为它只适用于目标文件夹有777权限。 否则,会失败,并显示以下消息 av_interleaved_write_frame(): I/O error occurred Usually that means that input file is truncated and/or corrupted. 如果我touch图像文件,而不是通过ffmpeg创build它,那么文件夹是否具有775或777并不重要。生成的文件也属于www-data,这意味着子stream程本身以www-data的forms运行,不是吗? 我想创build一个具有777权限的子文件夹,但我不喜欢它,原因有两个:此文件夹必须dynamic创build,因为我想能够创build新用户(并在我的上传文件夹中生成新的子文件夹) 。 无论如何,777权限并不是一个好的解决scheme。 你有什么build议,我必须改变,所以ffmpeg可以写入文件夹,而无需打开安全漏洞,并且在创build新的用户/文件夹时不必触摸任何东西?

我如何等待subprocess?

我有一个Python脚本来启动这样的任务: import os os.system("./a.sh") do_c() 但是a.sh是启动其他程序的bash脚本。 在所有已启动的脚本准备就绪之前,bash脚本本身似乎已经准备就绪。 在执行do_c()之前,如何等待所有脚本(subprocess)准备就绪? 澄清:当我准备好了,我的意思是完成/退出。 例 run.py 这个文件可以改变。 但不要依赖睡眠,因为我不知道a.py和b.py花多less时间。 #!/usr/bin/env python import os from time import sleep print("Started run.py") os.system("./a.py") print("a is ready.") print("Now all messages should be there.") sleep(30) a.py 这可能不会被修改: #!/usr/bin/env python import subprocess import sys print(" Started a.py") pid = subprocess.Popen([sys.executable, "b.py"]) print(" End of a.py") b.py 这可能不会被修改: […]

使用进程replace作为Python的input文件两次

考虑下面的python脚本 #test.py import sys inputfile=sys.argv[1] with open(inputfile,'r') as f: for line in f.readlines(): print line with open(inputfile,'r') as f: for line in f.readlines(): print line 现在我想在一个替代过程上运行test.py ,例如, python test.py <( cat file | head -10) 看来第二个f.readlines返回空。 为什么是这样的,有没有办法做到这一点,而不必指定两个input文件?

python kivy在矩形内添加文本

如何在矩形内添加文本? 我正在使用下面的代码,并在canvas中添加一个标签,希望它会显示在矩形内。 import kivy from kivy.app import App from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.label import Label from kivy.uix.video import Video from kivy.uix.relativelayout import RelativeLayout from kivy.graphics import * class MyApp(App): def build(self): r = AnchorLayout() f = RelativeLayout() g = GridLayout(cols=3, rows=5) v = Video(source='driver.mp4', state='play', options={'eos':'loop'}) l1 = Label(text="jenkins", font_size=32) […]

在linux上安装非默认版本的python模块

我在我的Ubuntu机器上安装了不同的python版本。 默认版本是2.7。 所以,当我安装任何新的Python模块,例如使用: #apt-get install python-nfqueue 它只会被默认版本(2.7) 我怎样才能安装其他版本的新模块? 有没有办法使用apt-get安装? 谢谢!

Tkinter看(主题)在Linux中

我知道Tkinter不是很现代,不是很酷,也许使用PyQt或更好 但是对于我来说,Tkinter在Ubuntu(Linux)中看起来并不那么难看。 看起来python的Tkinter酿造版本(在OS X中)内置的主题编译和看起来不错: 但是Ubuntu的Tkinter让我哭了: 我已经阅读了好主题,我需要使用ttk,但我不知道如何。 我的代码如下所示: from Tkinter import * class App(): def __init__(self, master): frame = Frame(master) frame.pack() master.title("Just my example") self.label = Label(frame, text="Type very long text:") self.entry = Entry(frame) self.button = Button(frame, text="Quit", fg="red", width=20, command=frame.quit) self.slogan = Button(frame, text="Hello", width=20, command=self.write_slogan) self.label.grid(row=0, column=0) self.entry.grid(row=0, column=1) self.slogan.grid(row=1, column=0) self.button.grid(row=1, column=1) def […]