[英]convert a bash script to python3
我有一个bash脚本,可以完美运行:
gvim --servername "servername" $1
if [ -f ${1%.tex}.pdf ];
then
evince ${1%.tex}.pdf &
fi
evince_vim_dbus.py GVIM servername ${1%.tex}.pdf $1 &
我正在尝试将其转换为python:
#!/usr/bin/env python3
from subprocess import call
import sys, os
inp_tex = sys.argv[1]
oup_pdf = os.path.splitext(sys.argv[1])[0]+".pdf"
print(oup_pdf)
call(["gvim", "--servername", "servername", sys.argv[1]])
if os.path.exists(oup_pdf):
call(["evince", oup_pdf])
call(["evince_vim_dbus.py", "GVIM", "servername", oup_pdf, inp_tex])
在python中,同时打开了gvim和evince窗口,但evince_vim_dbus.py
行不起作用。 并不是说它给出了任何错误,而是它没有像预期的那样显示预期的结果,并且与bash脚本有关。
尝试使用check_call (我必须在一段时间后将其杀死,这是回溯):
追溯(最近一次通话):
File "/home/rudra/vims.py", line 28, in <module>
check_call(["python","/home/rudra/bin/evince_vim_dbus.py", "GVIM", "servername", oup_pdf, inp_tex])
File "/usr/lib64/python3.5/subprocess.py", line 576, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/lib64/python3.5/subprocess.py", line 559, in call
return p.wait(timeout=timeout)
File "/usr/lib64/python3.5/subprocess.py", line 1658, in wait
(pid, sts) = self._try_wait(0)
File "/usr/lib64/python3.5/subprocess.py", line 1608, in _try_wait
(pid, sts) = os.waitpid(self.pid, wait_flags)
KeyboardInterrupt
我将猜测,您真正的问题不是evince_vim_dbus.py
行本身,而是gvim
行,因为您向其传递了服务器名'servername'
而不是简单的servername
,因此与运行evince_vim_dbus.py
的行上的名称。
我不熟悉gvim或它的服务器功能,但是我猜evince_vim_dbus.py
程序使用给定名称连接到gvim,在这种情况下,由于名称正确的服务器未运行,它将失败。
如果不是,那么问题可能出在subprocess.call()
运行给定程序并等待其退出,而在您的原始bash脚本中,您使用&符运行evince
,导致bash不等待它,所以也许问题在于,在退出Evince之前, evince_vim_dbus.py
根本不会运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.