如何在 Linux Ubuntu 12.04 上从 Python 调用脚本文件或可执行文件

Posted

技术标签:

【中文标题】如何在 Linux Ubuntu 12.04 上从 Python 调用脚本文件或可执行文件【英文标题】:how to call a script file or executable from Python on Linux Ubuntu 12.04 【发布时间】: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 ') ...不起作用。为什么? 【参考方案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()

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

【讨论】:

以上是关于如何在 Linux Ubuntu 12.04 上从 Python 调用脚本文件或可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 12.04 中怎么安装 jdk 7

Linux - Ubuntu中文输入法安装(Ubuntu 12.04)

如何在ubuntu16.04创建12.04 gcc编译环境

ubuntu 12.04 中怎么安装 jdk 7

ubuntu12.04下创建了一个守护进程,生成了一个可执行文件,如何让这个可执行文件开机自动运行?

ubuntu12.04中用emacs进行shell编程怎么配置呢?