首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gksudo和python脚本

gksudo和python脚本
EN

Stack Overflow用户
提问于 2013-09-28 23:37:45
回答 1查看 507关注 0票数 0

嗨,我现在有一个较小的问题,但问题仍然存在。我的python脚本在通过gksudo运行时似乎没有按顺序执行。第一个if块中的系统命令之前执行,

代码语言:javascript
复制
print ("Removing Partial, Unneeded, And Obsolete Packages...");

那条线。

下面是我的脚本的其余部分:

代码语言:javascript
复制
#!/usr/bin/env python

import os;

F1 = open('/tmp/F1.txt', 'r').read();
F2 = open('/tmp/F2.txt', 'r').read();
F3 = open('/tmp/F3.txt', 'r').read();
F4 = open('/tmp/F4.txt', 'r').read();
F5 = open('/tmp/F5.txt', 'r').read();
os.system("rm /tmp/F1.txt");
os.system("rm /tmp/F2.txt");
os.system("rm /tmp/F3.txt");
os.system("rm /tmp/F4.txt");
os.system("rm /tmp/F5.txt");


if F1=="1":
    print ("Removing Partial, Unneeded, And Obsolete Packages...");
    os.system ("sudo apt-get clean -y -f");
    os.system ("sudo apt-get autoremove -y -f");
    os.system ("sudo apt-get autoclean -y -f");
    open('/tmp/Point.txt', 'w').write("2");
    print ("...Done");

if F2=="1":
    print ("Clearing Temporary Files...");
    os.system ("sudo rm -rf /tmp/*");
    open('/tmp/Point.txt', 'w').write("3");
    print ("...Done");

if F3=="1":
    print ("Clearing Unused Thumbnails...");
    os.system ("rm -f ~/.thumbnails/normal/*");
    open('/tmp/Point.txt', 'w').write("4");
    print ("...Done");

if F4=="1":
    print ("Clearing Downloads Folder...");
    os.system ("rm -r ~/Downloads/*");
    open('/tmp/Point.txt', 'w').write("5");
    print ("...Done");

if F5=="1":
    print ("Emptying Trash...");
    os.system ("rm -rf ~/.local/share/Trash/*");
    open('/tmp/Point.txt', 'w').write("6");
    print ("...Done");

print ("");
os.system("rm /tmp/Point.txt"); 
print ("Cleanup Complete.");

请帮帮A.S.A.P.布鲁克斯·雷迪。

EN

回答 1

Stack Overflow用户

发布于 2013-09-28 23:55:53

虽然这只是一个猜测,但我希望您看到的是I/O buffering的结果。如果是在Python3.3或更高版本中,请尝试print(message, flush=True)。在Python2中,您将需要调用sys.stdout.flush() -但是只有当标准输出没有被确定为终端时才会发生这种情况;例如,如果标准输出由cron运行,或者通过管道传输到另一个程序。要演示此问题,请运行以下脚本:

代码语言:javascript
复制
import time, sys

print "hello there"
#sys.stdout.flush()
time.sleep(2)
print "bye"

如果使用python script运行,则运行正常,但如果以python script | dd bs=1身份运行,则在两秒后才会显示任何内容,此时两个打印行都会出现。删除#,以便发生刷新,可修复此问题。

这种I/O缓冲的原因是收集大量小内存,从而减少对外部I/O的调用次数。这很少有明显的区别,但最终可能会产生影响,例如,对于耗尽的内存或具有固定块大小的I/O设备。我用来显示差异的dd命令使用可配置的参数进行缓冲,在本例中为1字节。

顺便说一句,脚本中的所有分号都是不必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19068619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档