我正在编写一个 Python 脚本来比较两个文件。因此,我选择作为外部程序使用grep,启动以下两个命令:
grep -Fvf content1.txt content2.txt
grep -Fvf content2.txt content1.txt
Run Code Online (Sandbox Code Playgroud)
从这些命令的结果中可以看出差异,我可以通过计算行数来提取差异量。
为了在 Python 脚本中执行此操作,我将这些grep命令嵌入到subprocess.Popen()函数中:
try:
output1, errors1 = subprocess.Popen(
["c:\\cygwin\\bin\\grep", "-Fvf", "content1.txt", "content2.txt"],
shell=True, stdout=PIPE, stderr=PIPE).communicate()
output2, errors2 = subprocess.Popen(
["c:\\cygwin\\bin\\grep", "-Fvf", "content2.txt", "content1.txt"],
shell=True, stdout=PIPE, stderr=PIPE).communicate()
if (len(output1) + len(output2) + len(errors1) + len(errors2) > 0):
print("Result : there are differences:")
if (len(output1) + len(output2) > 0):
print(" Output differences : ")
print(output1)
# print (str(str(output1).count('\n'))); (*)
print(output2)
# print (str(str(output2).count('\n'))); (*) …Run Code Online (Sandbox Code Playgroud) 我在 python 日志类中观察到这个奇怪的问题,我有两个脚本,一个是从另一个脚本调用的。第一个脚本等待其他脚本结束,而其他脚本使用记录一个巨大的日志logging.info
这是代码片段
#!/usr/bin/env python
import subprocess
import time
import sys
chars = ["/","-","\\","|"]
i = 0
command = 'sudo python /home/tejto/test/writeIssue.py'
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
while process.poll() is None:
print chars[i],
sys.stdout.flush()
time.sleep(.3)
print "\b\b\b",
sys.stdout.flush()
i = (i + 1)%4
output = process.communicate()
Run Code Online (Sandbox Code Playgroud)
另一个脚本是
#!/usr/bin/env python
import os
import logging as log_status
class upgradestatus():
def __init__(self):
if (os.path.exists("/tmp/updatestatus.txt")):
os.remove("/tmp/updatestatus.txt")
logFormatter = log_status.Formatter("%(asctime)s [%(levelname)-5.5s] %(message)s")
logger = log_status.getLogger()
logger.setLevel(log_status.DEBUG)
fileHandler = log_status.FileHandler('/tmp/updatestatus.txt', "a")
fileHandler.setLevel(log_status.DEBUG)
fileHandler.setFormatter(logFormatter) …Run Code Online (Sandbox Code Playgroud) 我目前在 unix 环境中使用 Python 2.7。我需要在 python 脚本中运行 R 脚本,但我无法使其工作,因为我的 R 模块需要先加载(使用“模块加载”)
这是我的 python 脚本:
import os
import subprocess as sp
os.system('module load R/3.2.3')
out = sp.check_output(['Rscript','test.R'], universal_newlines=True)
Run Code Online (Sandbox Code Playgroud)
我一直遇到同样的错误:“[Errno 2]没有这样的文件或目录”
感谢您的帮助 !
我想要完成的是从 Twitter 传输一小时的推文,将推文列表写入文件,清理并运行最近一小时的推文分析,然后无限期地重复该过程。
我遇到的问题是,如果我在处理流的同一脚本中运行推文的清理和分析 - 通过对其进行硬编码或从模块导入功能 - 整个脚本将等待这些过程完成,然后再次开始流式传输。有没有办法在流脚本中调用清理和分析模块,以便它们同时运行,并且在清理和分析发生时流不会停止?
我尝试通过使用subprocess.call('python cleaner.py', shell=True)和来实现此subprocess.Popen('python cleaner.py', shell=True)目的,但我真的不知道如何正确使用这些工具,上面的两个示例导致流媒体停止、cleaner.py运行,然后恢复流媒体。
我目前正在研究为 ROS(机器人操作系统)创建一个通用配置工具。使用subprocess.POpen()并且Tkinter我正在创建treeview这样的:
由于简洁的方式rospack list(列出系统上安装的所有软件包的命令,包括开发人员在其中创建自己的软件包的相应工作区中的软件包)的工作方式,前两列的创建相当简单:
ros_packages_install_retrieve = subprocess.Popen(["rospack list"], shell=True, stdout=subprocess.PIPE)
ros_packages_installed = []
for ros_package in ros_packages_install_retrieve.stdout.readlines():
ros_package_adapted = ros_package.split(" ")
ros_package_adapted[1] = ros_package_adapted[1][:-1]
ros_packages_installed.append(ros_package_adapted)
Run Code Online (Sandbox Code Playgroud)
由于调用问题, “要求”列是一个棘手的问题rospack depends <package>(列出(如果有的话)系统上需要存在的所有软件包<package>,以便构建和/或运行)。对于里面的每个包,ros_packages_installed我调用以下函数:
def get_deps(ros_package):
ros_package_deps_retrieve = subprocess.Popen(["rospack", "depends", ros_package], shell=True, stdout=subprocess.PIPE)
ros_package_deps = []
for ros_package_dep in ros_package_deps_retrieve.stdout.readlines():
ros_package_dep = ros_package_dep.split("\n")
ros_package_dep = ros_package_dep[:-1]
ros_package_deps.append(ros_package_dep)
return ros_package_deps
Run Code Online (Sandbox Code Playgroud)
问题是我得到了
[rospack]错误:没有给出包
并且返回值始终是一个空列表。我什至尝试将ros_package参数连接到命令本身,但一切都是徒劳的。
在我徒劳的尝试中,我发现了一些相当奇怪的事情。和实际上list都是depends传递给 …
我正在尝试将程序(已知 PID)设置为顶部/活动/前景(不确定哪个最合适)。
PID设置为windows进程PID
handle = win32api.OpenProcess( win32con.PROCESS_ALL_ACCESS,
False, pid)
win32gui.SetForegroundWindow(handle)
win32gui.SetActiveWindow(handle)
Run Code Online (Sandbox Code Playgroud)
我要么得到:
pywintypes.error: (1400, 'SetForegroundWindow', 'Invalid window Handle.')
pywintypes.error: (1400, 'SetActiveWindow', 'Invalid window handle.')
Run Code Online (Sandbox Code Playgroud)
我意识到这是处理程序中的问题,但我不确定我应该如何正确获取工作句柄。
我想编写一个 python 脚本,在终端的最后一行显示其当前进度,类似于apt(not apt-get) 的行为。我知道有 ANSI 控制序列可以与终端交互,但问题是我想调用其他程序(使用subprocess)来生成自己的输出。我不想让这些程序覆盖我的进度。
可能有多个子进程同时运行。我正在使用该multithreading模块,每个线程都会执行一些工作,然后调用并等待子进程,然后执行清理工作。我不介意子进程的输出被混合,只要最后一行不受影响。
当程序退出时,最后一行应该被清除。
我一直在尝试如何通过将和分配给值来不打印Python的shell输出:subprocess.call()open(os.devnull, 'w')subprocess.PIPEstdout
subprocess.call(command, stdout=open(os.devnull, 'w'), shell=True)
Run Code Online (Sandbox Code Playgroud)
和
subprocess.call(command, stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)
这两行都command谨慎地执行存储在变量中的 shell 命令,即不在终端上输出。但是,我不知道两者之间的区别。我刚开始使用subprocess.
/ogs
对于由p以下创建的类对象asyncio.subprocess.Process
p = await asyncio.create_subprocess_exec(...)
Run Code Online (Sandbox Code Playgroud)
如何以非阻塞方式确定系统调用是否仍在运行?
我正在使用 python 3.7 在 pycharm 中运行以下代码。但出现此错误。
import subprocess
subprocess.run('dir', shell=True)
Run Code Online (Sandbox Code Playgroud)
错误消息:AttributeError:模块“子进程”没有属性“运行”
subprocess ×10
python ×9
python-3.x ×3
arguments ×1
concurrency ×1
cygwin ×1
deadlock ×1
grep ×1
linux ×1
logging ×1
popen ×1
python-2.7 ×1
python-3.7 ×1
pywin32 ×1
r ×1
ros ×1
shell ×1
terminal ×1