我想知道是否可以以这样的方式运行 Python 应用程序子进程,以便在任务管理器中不会有重复的进程?
python 是否提供了一种方法来查找使用子进程生成的子进程的子进程,以便我可以正确地杀死它们?如果不是,有什么好的方法可以确保孩子的孩子被杀死?
所以,我有一个简单的类,我试图将来自终端 ffmpeg 命令的字符串响应保存到对象属性中:
import os
import subprocess
class Movie(object):
absolute_path = None
movie_info = None
def __init__(self, path):
self.absolute_path = "%s/%s" % (os.getcwd(), path)
if(os.path.exists(self.absolute_path) is False):
raise IOError("File does not exist")
def get_movie_info(self):
ffmpeg_command = "ffmpeg -i %s" % self.absolute_path
self.movie_info = subprocess.call(ffmpeg_command)
print self.movie_info
Run Code Online (Sandbox Code Playgroud)
当我然后在 cmd 中运行此命令时:
import os
import sys
sys.path.append(os.getcwd())
from Encode.Movie import Movie
try:
movie = Movie("tests/test_1.mpg")
movie.get_movie_info()
except IOError as e:
print e
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
richard@richard-desktop:~/projects/hello-python$ python main.py
Traceback (most recent call last):
File "main.py", …Run Code Online (Sandbox Code Playgroud) 如何在 Python 中替换os.system("mkdir " + _testName)with subprocess.call()?
mkdir是我要运行的 unix 命令。_testName是在 python 脚本中定义的变量。
题
如何使用cd和更改 raspberry pi 上的活动目录subprocess module?
背景
因为我非常讨厌使用命令行,所以我正在尝试创建一个基本的 GUI 文本编辑器,它也可以编译我的程序。现在,我只是想将目录更改为Desktop. 为此,我正在使用该subprocess模块。这是我当前的代码:
from subprocess import *
call(["cd","Desktop"])
Run Code Online (Sandbox Code Playgroud)
在终端中,这一行 ( cd Desktop) 会将活动目录更改为Desktop. 奇怪的是,当我运行它subprocess时,出现以下错误:
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
技术规格
树莓派 B 型
树莓派“Wheezy”操作系统
我正在尝试使用 eclipse 在 python 中打开 mac 上的文件。
FileName = "/Users/fis/Desktop/installation_guide.txt"
ss = subprocess.Popen(FileName, shell=True)
ss.communicate()
Run Code Online (Sandbox Code Playgroud)
还有os.popen(FileName)。但是文件没有打开。这些代码在 Windows 中运行良好。但是,我不知道mac有什么问题。我想打开一个文件,就像双击windows打开文件一样,而不是像在控制台中读取文件内容和打印一样。文件存在于 Mac 上的桌面位置
我有一个运行其他 shell 脚本的 python (v3.3) 脚本。我的 python 脚本还打印诸如“关于运行脚本 X”和“完成运行脚本 X”之类的消息。
当我运行我的脚本时,我将 shell 脚本的所有输出与我的打印语句分开。我看到这样的事情:
All of script X's output
All of script Y's output
All of script Z's output
About to run script X
Done running script X
About to run script Y
Done running script Y
About to run script Z
Done running script Z
Run Code Online (Sandbox Code Playgroud)
我运行 shell 脚本的代码如下所示:
print( "running command: " + cmnd )
ret_code = subprocess.call( cmnd, shell=True )
print( "done running command")
Run Code Online (Sandbox Code Playgroud)
我写了一个基本的测试脚本,但*没有*看到这种行为。这段代码符合我的期望:
print("calling")
ret_code …Run Code Online (Sandbox Code Playgroud) 我尝试了以下脚本.
我的初衷是如果成功执行以下代码段中的命令"command_a",则程序结束.否则,它会执行其他处理.
#!/usr/bin/python
import subprocess
try:
command = "command_a"
subprocess.check_call(command.split())
print "Woks fine!, and stopping"
sys.exit()
except:
pass
print "Continue additional processing"
call_some_additional_processing()
Run Code Online (Sandbox Code Playgroud)
但是,我注意到这sys.exit()没有按预期工作.即使subprocess.check_call成功,它也会调用call_some_additional_processing().
你能告诉我原因是什么,解决这个问题的最佳方法是什么?
这个问题的背景是我正在尝试编写一个程序来协助分析数据.它应该用python3编写,但是它的数据类型通常以python无法读取的格式存储.有一个包来读取这些数据,但它只与python2兼容.为了读取数据,我因此想要编写一个python2脚本来读取文件并将其转换为numpy数组.我想在我的python3程序中阅读.(有问题的包装是axographio 1).
一般来说,我想要的是:
给出一个(python2)脚本
#reading.py
import numpy
x = numpy.random.random(size=10000)
Run Code Online (Sandbox Code Playgroud)
运行一个可以某种方式得到x的(python3)
#analyze.py
import matplotlib.pyplot as plt
#fancyfunction that gets x from reading.py
plt.plot(x)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这里重要的是read.py由python2解释器执行,因为它不能用于python3.
根据subprocess.Popen的Python 3文档,类构造函数接受一个可选参数text(它应该控制文件对象stdin,stdout和stderr是否以文本模式打开).
但是,当我尝试设置对象的text=true构造时Popen,我得到错误
Failed: TypeError: __init__() got an unexpected keyword argument 'text'
Run Code Online (Sandbox Code Playgroud)
当我查看源代码(我使用的是Python 3.6.4)时,构造函数不带参数text.这里发生了什么?为什么文档说构造函数text在subprocess.py我的版本中没有可选参数?
python ×10
subprocess ×10
cd ×1
ffmpeg ×1
kill ×1
linux ×1
macos ×1
module ×1
os.system ×1
popen ×1
process ×1
python-2.x ×1
python-3.6 ×1
python-3.x ×1
raspberry-pi ×1