【问题标题】:how to call a script file or executable from Python on Linux Ubuntu 12.04如何在 Linux Ubuntu 12.04 上从 Python 调用脚本文件或可执行文件
【发布时间】:2012-10-07 02:56:53
【问题描述】:

如果我从 Python 解释器或 Python 脚本调用脚本文件,我会收到错误 'No such file or directory' 并且 Linux 脚本不会执行。 如果我调用纯 Linux 命令,例如 subprocess.call('ls') 就可以了。

在“C”中,我会使用:system("");

Python 中的等价物是什么?

从我的 Python 脚本,在 Linux 计算机上,我需要调用执行构建的脚本。 subprocess.call 非常适合 Linux shell 命令,但是当我调用脚本时会得到 'No such file or directory'

这是我调用的 Python 脚本行:

    rtn_code = subprocess.call(['~/WindRiver/workspace/XPedite5570_SMP_VIP/build_MM_VxWorks'])

`build_MM_VxWorks` is a Linux script that uses VxWorks development tools to build a VxWorks kernel.

`build_MM_VxWorks` works okay from the Linux command line.

【问题讨论】:

  • 您是否尝试过指定绝对路径而不是使用~/ 表示法?
  • ~ 是外壳的一个特性。如果你不调用 shell,你就没有它。
  • 你可以通过读取os.environ['HOME']pwd.getpwuid(os.getuid()).pw_dir的值来近似~的行为。
  • @FatalError 还有os.path.expanduser
  • 这有效: import os os.system('./myscript') 也 os.system('~/primary/experiments/myscript') 但是, import subprocess subprocess.call('./myscript ') ...不起作用。为什么?

标签: python linux subprocess


【解决方案1】:

您可能想试试pexpect。它在较高级别上模拟 shell 用户输入。它可能有点“hacky”,但是当您需要自动化工作程序时它非常强大。

这是我如何使用它来读取数据库中的表:

import pexpect, getpass

child = pexpect.spawn('mysql -u root -p')
child.expect('Enter password: ')
password = getpass.getpass("Enter Mysql password for user root \n")
child.sendline(password)
child.sendline("use database")

child.expect('Database changed')

child.sendline('SELECT * FROM table;')
child.interact()

如您所见,模仿用户输入非常容易。

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2013-05-08
    • 2015-10-06
    • 2011-04-26
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多