簡體   English   中英

將bash腳本轉換為python3

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM