- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想从 python 脚本中调用一个单独的非子 python 程序,并让它在一个新的 shell 实例中在外部运行。原始的 python 脚本不需要知道它启动的实例,它不应该在启动的进程运行时阻塞,也不应该关心它是否死亡。这是我尝试过的方法,它没有返回任何错误,但似乎什么也没做……
import subprocess
python_path = '/usr/bin/python'
args = [python_path, '&']
p = subprocess.Popen(args, shell=True)
我应该做什么不同的事情
这样做的原因是我有一个内置 python 版本的应用程序,我已经编写了一些应该与该应用程序一起单独运行的 python 工具,但不能保证用户会在他们的系统上安装 python在我正在使用的内置版本的应用程序之外。因此,我可以通过编程方式从内置版本中获取 python 二进制路径,并且我想启动内置 python 的外部版本。这消除了用户自己安装 python 的需要。所以本质上我需要一种简单的方法来以编程方式使用我当前运行的 python 版本调用外部 python 脚本。
我不需要将任何输出捕获到原始程序中,事实上一旦启动我希望它与原始程序无关
所以我原来的问题似乎很不清楚所以这里有更多细节,我想我是想过度简化问题:
我正在运行 OSX,但代码应该也可以在 Windows 机器上运行。
具有内置 CPython 版本的主要应用程序是一个编译的 c++ 应用程序,它附带一个在运行时使用的 python 框架。您可以通过在 OSX 的终端窗口中执行此操作来启动此版本 python 的嵌入式版本
/my_main_app/Contents/Frameworks/Python.framework/Versions/2.7/bin/python
在我的主应用程序中,我希望能够在主应用程序中嵌入的 python 版本中运行命令,该命令使用上述 python 版本启动 python 脚本的外部副本,就像我执行在终端窗口中执行以下命令。新启动的孤立进程应该有自己的终端窗口,以便用户可以与之交互。
/my_main_app/Contents/Frameworks/Python.framework/Versions/2.7/bin/python my_python_script
我希望子 python 实例不会阻塞主应用程序,我希望它有自己的终端窗口,以便用户可以与之交互。一旦以任何方式启动,主应用程序不需要知道 child 。我这样做的唯一原因是使用终端为用户自动启动外部应用程序
最佳答案
如果您尝试启动一个新的终端窗口以在其中运行新的 Python(这不是您的问题所要求的,但从评论来看,这听起来像是您真正想要的):
你不能。至少不是以通用的跨平台方式。
Python 只是一个命令行程序,可以使用给定的任何标准输入/标准输出/标准错误运行。如果这些恰好来自终端,那么它就在终端中运行。除此之外,它对终端一无所知。
如果您需要为某些特定平台和某些特定终端程序执行此操作——例如,OS X 上的 Terminal.app、OS X 上的 iTerm、Windows 上的“DOS 提示符”、任何 X11 系统上的 gnome-terminal 等.—这通常是可行的,但实现它的方法是启动或编写终端程序脚本并告诉它打开一个新窗口并在该窗口中运行 Python。而且,不用说,他们都有完全不同的方式来做到这一点。
即便如此,也并非在所有情况下都可行。例如,如果您通过 ssh 连接到一台远程机器并在该机器上运行 Python,它就无法返回到您的机器并打开一个新的终端窗口。
在大多数有多个可能的终端的平台上,您可以编写一些启发式代码,通过遍历 os.getppid()
来确定您当前在哪个终端下运行,直到找到看起来像的东西就像一个你知道如何处理的终端(如果你进入 init
/launchd
/etc. 而没有找到一个,那么你就没有在终端中运行)。
关于python - 从 python 在 shell 中启动外部 shell python 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150530/
我相信我在子 shell 中调用 exit 会导致我的程序继续: #!/bin/bash grep str file | while read line do exit 0 done
我相信我在子 shell 中调用 exit 会导致我的程序继续: #!/bin/bash grep str file | while read line do exit 0 done
我有几个脚本,它们的第一部分看起来是一样的。这部分的功能是识别脚本在哪台机器上运行并相应地设置几个变量。它看起来像这样: ENV=`echo $LOGNAME | cut -c1-8` if
这是我正在尝试做的事情。我有 4 个 shell 脚本。脚本 1 需要先运行,然后是 2,然后是 3,然后是 4,并且它们必须按此顺序运行。脚本 1 需要运行(并在后台等待)2 才能正常运行,但是脚本
我有一个名为 a.sh 的脚本,其中的内容是: //a.sh: #!/bin/bash temp=0 while [ "$temp" -ne 500 ] do echo `date`
在snakemake中,使用shell()函数执行多个命令的推荐方式是什么? 最佳答案 您可以调用shell()多次内run规则块(规则可以指定 run: 而不是 shell: ): rule pro
我有一个 shell 脚本,我向其中传递了一些参数。Test1.sh -a 1 -b 2 -c“一二三” 在 Test1.sh 中,我按以下方式调用另一个 shell 脚本。Test2.sh $* 我
我有 2 个 shell 脚本。 第二个shell脚本包含以下函数第二个.sh func1 func2 first.sh 将使用一些参数调用第二个 shell 脚本, 将使用特定于该函数的一些其他参数
我有一个 Unix shell 脚本 test.sh。在脚本中,我想调用另一个 shell,然后从子 shell 执行 shell 脚本中的其余命令并退出 说清楚: test.sh #! /bin/b
我想在 shell 脚本中更改路径环境变量。路径变量需要在shell脚本执行后修改。 最佳答案 我知道有两种方法可以做到这一点。第一种是在当前 shell 的上下文中运行脚本: . myscript.
此 shell 脚本按预期运行。 trap 'echo exit' EXIT foo() { exit } echo begin foo echo end 这是输出。 $ sh foo.sh
我正在使用 vimshell在 vim 中执行命令 nnoremap vs :VimShellPop 使用此键映射,我可以打开 vim shell 并执行诸如“捆绑安装”之类的命令,然后 输入 exi
我想连接到不同的 shell(csh、ksh 等)并在每个切换的 shell 中执行命令。 下面是反射(reflect)我的意图的示例程序: #!/bin/bash echo $SHELL csh e
我目前正在尝试使用 BNF 和 LL 解析器在 C 中重新编写 shell。 否则,我需要知道 shell 运算符的优先级是什么| , > , > , & , ; ? 有没有人可以提供给我? 谢谢 最
不幸的是,我没有suspend 命令(busybox/ash)。但是我可以使用 kill -STOP $$ 从后台 shell (sh &) 返回到父 shell(以及 fg 之后)。 但是我不想输入
我需要知道,当用户切换到另一个 shell 时,通过单击它。 我试过 shellListener.shellDeactivated()但是当 shell 失去对它自己的控件的焦点时,会触发此事件,这意
file1.txt aaaa bbbb cccc dddd eeee file2.txt DDDD cccc aaaa 结果 bbbb eeee 如果能不区分大小写就更好了! 谢谢! 最佳答案 gre
我见过解压缩目录中所有 zip 文件的循环。但是,在运行此之前,我宁愿确保我将要运行的内容正常工作: for i in dir; do cd $i; unzip '*.zip'; rm -rf *.z
我对编程还很陌生,但我想知道 vim、emacs、nano 等 shell 文本编辑器如何能够控制命令行窗口。我主要是一名 Windows 程序员,所以可能在 *nix 上有所不同。据我所知,只能将文
我有一个包含第 7 列日期的文件,我的要求是将它与今天的日期进行比较,如果小于它,则删除该完整行。 此外,如果第 7 列中提到的任何日期超过 15 天,则将其修改为最多 15 天 下面的例子- now
我是一名优秀的程序员,十分优秀!