在另一个xterm会话中启动python脚本

时间:2017-04-09 18:27:44

标签: python xterm

这行代码让我陷入困境。我已经阅读了很多在新的终端窗口中启动python脚本的方法。我认为我对这个陈述非常接近,但它似乎在我的道路上窒息。

代码行是:

os.system("xterm -hold 'sudo python /home/pi/newcode/newcode/hms2-v2.5.py'")

错误信息是:

xterm: no absolute path found for shell: sudo python /home/pi/newcode/newcode/hms2-v2.5.py

3 个答案:

答案 0 :(得分:1)

它告诉你实话。当您运行xterm <thing>时,xterm会尝试在<thing>中找到名为$PATH的二进制文件。在这种情况下,你传递了一个长引号字符串,但它仍然是一个参数,xterm可以预见到找不到它。

对于您要执行的操作,您需要-e选项。从手册页:

   -e program [ arguments ... ]
           This option specifies the program (and its command line arguments) to be run in the xterm window.  It also sets
           the window title and icon name to be the basename of the program being executed if neither -T nor -n are given on
           the command line.

所以:

os.system("xterm -hold -e sudo python /home/pi/newcode/newcode/hms2-v2.5.py")

答案 1 :(得分:0)

如上所述,您应该使用-e option

  

-e 程序[参数...]
                 此选项指定程序(及其命令行)                  参数)在xterm窗口中运行。它也设定了                  窗口标题和图标名称是程序的基本名称                  如果命令上既没有-T也没有-n,则被执行                  行。
  注意:这必须是命令行上的最后一个选项

手册页中有一个微妙的要点:当你省略 -e 时,xterm会尝试将整个带引号的字符串解释为shell解释器的名称。这是由于它实现localFilter

的方式而间接产生的
  

使用区域设置过滤器时,例如,使用 -e 选项,或                  shell,xterm首先尝试通过该过滤器传递控制权。如果                  它失败了,xterm将在没有locale-filter的情况下重试。的xterm                  在重试之前警告失败。

OPTIONS部分的开头还有一些额外的讨论:

  

可以给出一个参数(在所有选项之后)。这超过了xterm的          内置的shell程序选择:

     
      
  • 如果参数不是相对路径,即以&#34; ./"开头;要么        &#34; ../" ;, xterm在用户的路径中查找文件。在任一情况下,        如果xterm无法构造绝对路径,则此检查失败。
  •   

所以...当你尝试

os.system("xterm -hold 'sudo python /home/pi/newcode/newcode/hms2-v2.5.py'")

xterm尝试找到一个名为

的程序
sudo python /home/pi/newcode/newcode/hms2-v2.5.py

这不是你想要的。

答案 2 :(得分:0)

subprocess.Popen(['xterm', '-e', 'bash -c \"python pythonFile.py; exec bash\"'])