GVKun编程网logo

如何从 python 代码调用 shell 脚本?(python怎么调用shell脚本)

2

本文将带您了解关于如何从python代码调用shell脚本?的新内容,同时我们还将为您解释python怎么调用shell脚本的相关知识,另外,我们还将为您提供关于androidJNI实现C代码调用、A

本文将带您了解关于如何从 python 代码调用 shell 脚本?的新内容,同时我们还将为您解释python怎么调用shell脚本的相关知识,另外,我们还将为您提供关于android JNI 实现 C 代码调用、Ansible 如何从 shell 注册的输出构造数组,包括各自的主机名、bash – 如何从/ etc / inittab启动linux shell、CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取的实用信息。

本文目录一览:

如何从 python 代码调用 shell 脚本?(python怎么调用shell脚本)

如何从 python 代码调用 shell 脚本?(python怎么调用shell脚本)

如何从 python 代码调用 shell 脚本?

答案1

小编典典

子流程模块将帮助您。

明目张胆的例子:

>>> import subprocess>>> subprocess.call([''sh'', ''./test.sh'']) # Thanks @Jim Dennis for suggesting the []0 >>>

Wheretest.sh是一个简单的 shell 脚本,并且0是它在这次运行中的返回值。

android JNI 实现 C 代码调用

android JNI 实现 C 代码调用

由于 android 项目中要使用 C 写的代码,因此也就需要用到 JNI,首先想到就是用 NDK 方式显现。

参考教程《Android 应用开发揭秘》,这是我的入门教程,觉得不错。不过今天还是要鄙视下,2011 版但有些内容却太旧了。

首先参考教程搭建 NDK 环境

Eclipse  早已完成

Cygwin 说是 window 下需要的

NDK

NDK 方便,官网下个解压就 OK 了,Cygwin 就头大了,一对功能选项不知道该选什么,搞多次不成功,后来还是群里朋友提醒新 NDK 已经不用 Cygwin 了,一查果然自 NDK-r7 以来就不用了,而我下的是 NDK-r9。下了 8G 的垃圾 Cygwin,不管了直接 baidu 个 NDK-build.cmd 有不少介绍如何针对 NDK-r7 以上如何进行配置(不在重复)。

配置完后把 NDK 下 jni 文件夹下的两个文件拷贝到自己的工程的 jni 文件夹中,编译生成:libhello-jni.so 文件

运行错误

   - 找不到 libhello-jin 库文件

   baidu 下原因,原来如果使用 system.loadLibrary ("xxx"); 参数中不能有 lib

   如果用 system.load 加载需要用绝对路径(没有测试),立马去掉参数中的 lib,库正常载入。感觉优点弱智

  - 找不到函数

    继续 baidu 看他人用例,感觉是接口命名问题,接口命名如下:

   java_com_example_hellojni_mytest_stringFromJNI(JNIEnv* env, jobject thiz )

   java: 头 固定不变

   com_example_hellojin:包名

   mytest:类名

   调用是时可以通过对象调用如:mytest test = new mytest ();

                                          test.stringFromJNI()

  也可以直接调用如:stringFromJNI

  有什么区别????未知

 这样看来感觉库加载后并不属于整个工程,而只属于某一个对象,而其他对象如果也想使用该接口时必须自己去加载,这也就要求 java 与 C 之间的接口竟可能集中,最好能用一个对象来管理.


接下来就是进行参数传递的测试了,这是我想要的...

Ansible 如何从 shell 注册的输出构造数组,包括各自的主机名

Ansible 如何从 shell 注册的输出构造数组,包括各自的主机名

如何解决Ansible 如何从 shell 注册的输出构造数组,包括各自的主机名?

我正在尝试从特定组的每个主机获取进程的状态,并以表格格式打印主机名和进程状态。

[Nginx]
172.1.0.1
172.1.0.2


---
hosts: all
tasks:
  - name: Get process status
    shell: ps -ef| grep [n]ginx
    register: Nginx_status
    when: ''"Nginx" in group_names''

期望的数组/表格格式如下(我在这里使用 shell 命令返回码来定义 UP 或 DOWN)。

例如:

jinja2 template to capture output:

{% for output in Nginx_status.stdout_lines %}
{{ output.hostname }}  {{ if output.rc == 0 UP else DOWN }}
{% endfor %}

模板不是强制性的,最终输出是我所期待的。

Final output:
HOST      Nginx
172.1.0.1 UP
172.1.0.2 DOWN

最后,每个组的合并输出应该是这样的。

HOST      Nginx Some-x Some-Y
172.1.0.1 UP     DOWN  UP
172.1.0.2 DOWN   UP    NA(Not Applicable)

解决方法

如果目标是将输出打印到控制台,则尝试过滤运行剧本的输出。有一些方法可以完全在 ansible 中做到这一点,但它更多地涉及使用 map

test.yml

---
- hosts: nginx
  tasks:
    - name: Get process status
      command: pgrep nginx
      register: proc_status
      changed_when: false
      failed_when: false

    - debug:
        msg: "###HOST           NGINX###"
      run_once: true

    - debug:
        msg: "###{{ ansible_host }} {{ (proc_status.rc == 0) | ternary(''UP'',''DOWN'') }}###"

运行:ansible-playbook test.yml | grep "###" | cut -d''#'' -f4 应该导致类似:

HOST           NGINX
192.168.15.101 UP
192.168.15.102 DOWN

您的用例可能因 ### 标记和表格列布局(使用 Linux column 命令?)而异,但这应该提供解决问题的基础知识。

请注意,您的原始 ps -ef | grep ... 不会从结果中过滤自身,因此始终会匹配。如果您沿 ps -ef | grep -v grep | grep [n]ginx 上的路线行驶,则需要使用 pgrep 之类的东西进行调整。

,

我回答是因为我没有足够的代表来评论。

“如果我使用 localhost 的委托附加在同一个文件中,那么 {{ ansible_host }} 将成为 localhost 而不是每个主机 IP。– SNR”

"{{inventory_hostname }}" 仍然是它在罐头上所说的,即使在 "delegate_to: localhost" 任务中也是如此。

bash – 如何从/ etc / inittab启动linux shell

bash – 如何从/ etc / inittab启动linux shell

我们以前在/ etc / inittab中有两个条目:

::sysinit:/etc/init.d/rcS
ttyS0::respawn:-/bin/sh

rcS是一个shell脚本,它通常启动我们的应用程序,但在特殊情况下我们调用“return”来终止它,这显然让/ bin / sh接管了tty,因为我们得到了一个shell提示符,我们可以在那里进行一些维护.

现在inittab看起来像这样:

::once:/etc/init.d/rcS

我们现在通过在rcS脚本中执行“/ bin / bash -i”来启动shell,因为我们不希望总是运行通常从不使用的第二个shell(由于内存限制).

但是创建的bash没有作业控制功能,这是非常有限的.

所以我的问题是,我可以创建一个shell(也许可以终止rcS脚本),就像我们之前的解决方案中init处理的那样,这样我再次获得一个带有作业控制的shell吗?

解决方法

这取决于您正在运行的操作系统.这是一个适用于RHEL / CentOS的示例.

6:2345:respawn:/sbin/mingetty --autologin root tty6

以下是其他人为类似技巧所做的事情.

openvt -f -c 12 -w -- sh -c "unicode_start; echo -e '$norPT'; exec $LOGINSH" >/dev/tty1

CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

如何解决CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取

我有一个看起来像这样的 CMake 脚本:

  1. find_program(PYTHON_COMMAND NAMES python3 python)

问题是它检测到安装在 Cygwin 安装中的 python。 输出总是:

  1. -- PYTHON_PATH:C:/cygwin64/bin/python3

我希望它取自:

  1. c:\\python36-64\\python

在windows PATH变量中,Cygwin bin在路径的最后一个,windows安装在第一个 但它只检测到 Cygwin python,
怎么改?

今天关于如何从 python 代码调用 shell 脚本?python怎么调用shell脚本的讲解已经结束,谢谢您的阅读,如果想了解更多关于android JNI 实现 C 代码调用、Ansible 如何从 shell 注册的输出构造数组,包括各自的主机名、bash – 如何从/ etc / inittab启动linux shell、CMake 不断从 cygwin python 中获取 Python,如何从 Windows 安装的 Python 中获取的相关知识,请在本站搜索。

本文标签: