python – Dos2unix在尝试静音命令时无法正常工作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Dos2unix在尝试静音命令时无法正常工作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1431字,纯文字阅读大概需要3分钟。
内容图文
![python – Dos2unix在尝试静音命令时无法正常工作](/upload/InfoBanner/zyjiaocheng/789/37f39d18ef2f4291b3b96a8586e39073.jpg)
我这样在Python中调用dos2unix:
call("dos2unix " + file1, shell=True, stdout=PIPE)
但是为了使Unix输出静音,我这样做了:
f_null = open(os.devnull, 'w')
call("dos2unix " + file1, shell=True, stdout=f_null , stderr=subprocess.STDOUT)
这似乎不起作用.该命令不再被调用为我在file1上对file2执行的差异(做了一个diff -y file1 file2 | cat -t并且可以看到行结尾没有改变).
file2是我正在比较file1的文件.它具有Unix行结尾,因为它是在盒子上生成的.但是,file1有可能没有.
解决方法:
不确定,为什么,但我会试图摆脱你的命令和周围的“噪音”检查返回码:
check_call(["dos2unix",file1], stdout=f_null , stderr=subprocess.STDOUT)
>传递args列表,而不是命令行(支持包含空格的文件!)
> remove shell = True,因为dos2unix不是内置的shell命令
>使用check_call,因此它会引发异常而不是静默失败
无论如何,dos2unix可能会检测到输出不再是tty,而是决定将输出转储到其中(dos2unix可以从标准输入和标准输出工作).我会接受那个解释.您可以通过重定向到真实文件而不是os.devnull来检查它,并检查结果是否存在.
但我会做一个纯python解决方案(安全备份),它是可移植的,不需要dos2unix命令(因此它也适用于Windows):
with open(file1,"rb") as f:
contents = f.read().replace(b"\r\n",b"\n")
with open(file1+".bak","wb") as f:
f.write(contents)
os.remove(file1)
os.rename(file1+".bak",file1)
完全读取文件很快,但可能会扼杀真正的大文件.也可以采用逐行解决方案(仍然使用二进制模式):
with open(file1,"rb") as fr, open(file1+".bak","wb") as fw:
for l in fr:
fw.write(l.replace(b"\r\n",b"\n"))
os.remove(file1)
os.rename(file1+".bak",file1)
内容总结
以上是互联网集市为您收集整理的python – Dos2unix在尝试静音命令时无法正常工作全部内容,希望文章能够帮你解决python – Dos2unix在尝试静音命令时无法正常工作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。