python等待shell命令完成
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python等待shell命令完成,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1647字,纯文字阅读大概需要3分钟。
内容图文
![python等待shell命令完成](/upload/InfoBanner/zyjiaocheng/968/3bb1e0dc05554d24b23b87841cc065ed.jpg)
我正在运行脚本来取消一些文件,然后删除rar文件.
我是通过shell运行命令来做到这一点的.我已经尝试了几种不同的方法让脚本等到完成解压缩文件,但它仍然继续并在文件被使用之前删除它.
我试过下面的代码,这是不行的.我试图看看我是否可以让wait()工作,但也没有运气.
有任何想法吗?
运行python 2.7
编辑:我希望脚本运行命令:)
p = subprocess.Popen('unrar e ' + root + '/' + i + ' ' + testfolder,
bufsize=2048, shell=True,
stdin=subprocess.PIPE)
p.stdin.write('e')
p.communicate()
for root, dirs, files in os.walk(testfolder):
for i in files:
print 'Deleting rar files'
os.remove(i)
for i in os.listdir(testfolder):
if os.path.isdir(testfolder + i):
shutil.rmtree(testfolder + i)
解决方法:
这是邪恶的:
p = subprocess.Popen('unrar e ' + root + '/' + i + ' ' + testfolder,
bufsize=2048, shell=True, stdin=subprocess.PIPE)
代替,
p = subprocess.Popen(['unrar', 'e', '%s/%s' % (root, i), testfolder],
bufsize=2048, stdin=subprocess.PIPE)
p.stdin.write('e')
p.wait()
if p.returncode == 0:
pass # put code that must only run if successful here.
通过将精确数组而不是字符串传递给Popen而不使用shell = True,其中包含空格的文件名不能被解释为多个参数,或子shell命令,或其他一些潜在的恶意内容(想想其名称中包含$(rm -rf ..)的文件).
然后,在调用p.wait()之后(当你没有捕获stderr或stdout时不需要p.communicate()),你必须检查p.returncode以确定进程是否成功,并且只继续删除文件,如果p.returncode == 0(表示成功).
在unrar进程仍在运行时,p.communicate()返回的初始诊断是不可行的; p.communicate()和p.wait()不会那样工作.
如果在ssh上运行,则会稍微改变一下:
import pipes # in Python 2.x; in 3.x, use shlex.quote() instead
p = subprocess.Popen(['ssh', ' '.join(
[pipes.quote(s) for s in ['unrar', 'e', '%s/%s' % (root, i), testfolder]])
内容总结
以上是互联网集市为您收集整理的python等待shell命令完成全部内容,希望文章能够帮你解决python等待shell命令完成所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。