【问题标题】:Running multiple command line after each other linux python在其他linux python之后运行多个命令行
【发布时间】:2015-08-04 13:23:05
【问题描述】:

我想在上一条命令完成后在同一行中运行多个命令。

我在 python 脚本中执行以下操作:

os.system("start_view myView && perl /home/user/Development/count_test.pl -rev 001 -project myproject && /usr/bin/python /home/user/Development/setDoneFlag_Count_Lines.py")

首先我在 clearcase start_view myview 中设置了一个视图,然后我想执行一个 perl 程序。问题是它没有,它只是设置视图(我需要它来执行 perl 程序)但它从未真正启动 perl 程序,所以问题是我做错了什么? start_view myView 似乎启动了一个新的 shell,那么如何在视图启动的新创建的 shell 中执行 perl 脚本呢?

提前致谢。

【问题讨论】:

  • 也许你告诉我们start_view,因为我们只能猜测......
  • 你试过;而不是&&吗?也许第一个命令返回不成功。
  • 如果start_view 正在启动一个新的shell,它可能根本不会返回。也许start_view 可以选择允许它在它创建的shell 中启动一个进程。
  • 如果这类似于 ClearCasestart_view 将有一个选项(例如 -c),您可以在其中给它一个命令以在已启动的 shell 中运行在视图的上下文中;如果存在,请将其余命令移到那里。此外,&& 在失败时会短路(即非零状态),但; 不会(即每个命令连续运行)。您也可以为反向短路执行||(即仅在出现故障时执行)。例如尝试:/bin/true && echo TRUE || echo FALSE/bin/false && echo TRUE || echo FALSE
  • 您在使用 Rational ClearCase 的 startview 吗?也许你想要setview -c your_commands_heresetview doc

标签: python linux perl shell


【解决方案1】:

通常,从 os.system() 调用时,多个依赖命令应该可以工作:

>>> rv = os.system("ls /dev/null && grep mhawke /etc/passwd")
/dev/null
mhawke:x:1000:1000:mhawke:/home/mhawke:/bin/bash
>>> rv
0

但如果一个命令失败(由非零退出状态确定),则不会执行以下命令:

>>> rv = os.system("ls /phantom && grep mhawke /etc/passwd")
ls: cannot access /phantom: No such file or directory
>>> rv
512

那么,您确定 start_view 返回退出代码 0 吗?你确定start_view 会返回吗? - 是否会被阻止等待输入。你确定这个命令实际上不是startview myView

你可以通过在命令行上执行这个来发现:

$ start_view myView
$ echo $?

如果它显示0,则尝试链中的下一个命令,直到找到罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多