我想使用python执行Fortran代码的可执行文件,并打印实时输出。如所示,我使用subprocess.Popen查看实时输出。当我执行像'du‘这样的命令时,我确实会得到实时输出,但我只有在Fortran的可执行文件运行完成后才会得到输出。
我的python脚本的相关部分是:
import subprocess as s
a=s.Popen('./fortran_with_fft.exe', shell=True, stdout=s.PIPE)
for line in iter(a.stdout.readline, ''):
print l
我是python的新手,在以下方面需要帮助。
假设我有一些不断向Python控制台输出数据的代码,例如:
for x in range(10000): print x
然后,我希望能够输入各种命令,这些命令可能会立即影响输出。例如,我输入一个数字,使循环从这个数字重新开始,或者我输入step=2,这会改变步长,等等。
基本上,我希望代码在后台运行和打印,而提示符仍然可用。
这样的事情有可能吗?我猜输出将不得不发送到一个新的窗口,但我不确定这在实践中会如何工作。我现在不喜欢图形用户界面,因为我只想让事情尽可能简单。
我正在写一个Python命令行程序。
有一个主Python脚本文件,用作入口点。当用户运行此脚本时,它将执行一些外部Python脚本文件。外部Python脚本文件还可以执行其他外部Python脚本文件。外部文件的数量是可变的。
Python脚本将使用以下命令执行外部Python脚本:
p = subprocess.Popen(args)
or
p = subprocess.call(args)
当我在终端窗口中运行Python主脚本时,它会在运行时在屏幕上打印实时日志消息。现在,我想从主Python脚本调用的所有外部Python脚本中获取所有日志消息,并将其打印到同一个终端窗口(我用来运行
有相当多的帖子与从使用Python的子进程模块启动的进程收集实时输出有关。当我在两个测试脚本(一个是(ba)sh脚本,另一个是Python脚本)之间尝试这些解决方案时,Python脚本无法实时读取其输出。相反,当Python脚本由子进程运行时,它会等待进程完成后才将其刷新到管道中。我受到的约束是,我确实想要一种从子进程中检索Python脚本的实时输出的方法。 在Ubuntu 20.04和Windows上测试,Shell脚本在Ubuntu 20.04上运行。 调用代码: import shlex
import subprocess
# invoke process
process = sub
我正在尝试实时解析程序块缓冲的输出,这意味着输出在进程结束之前不可用。我需要的只是逐行解析,过滤和管理输出中的数据,因为它可能会运行几个小时。
我尝试过使用subprocess.Popen()来捕获输出,但是,正如您可能猜到的那样,Popen无法管理这种行为,它会一直缓冲到进程结束。
from subprocess import Popen, PIPE
p = Popen("my noisy stuff ", shell=True, stdout=PIPE, stderr=PIPE)
for line in p.stdout.readlines():
#parsing
让我介绍一下我正在构建的应用程序的目标:我正在使用PySide (Qt)为CFD框架中使用的一个基于fortran的应用程序创建一个前端图形用户界面。fortran应用程序被编译为*.exe文件,在执行时,它会不断地提供模拟的时间流逝和其他输出细节(当我从控制台启动它时,这些数据会不断出现,直到它完成)。
例如,如果我从控制台执行外部代码,我会得到
>> myCFDapplication.exe
Initializing...
Simulation start...
Time is 0.2
Time is 0.4
Time is 0.6
Time
我正在通过Python的子流程模块运行一个脚本。目前我使用:
p = subprocess.Popen('/path/to/script', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = p.communicate()
然后,我将结果打印到标准输出。这一切都很好,但由于脚本需要很长时间才能完成,所以我希望脚本的实时输出也能达到标准输出。我之所以输出管道,是因为我想解析它。
有很多类似的帖子,但我没有找到答案。
在Gnu/Linux上,使用Python和subprocess模块,我使用以下代码迭代使用子进程启动的命令的stdout/sdterr:
class Shell:
"""
run a command and iterate over the stdout/stderr lines
"""
def __init__(self):
pass
def __call__(self,args,cwd='./'):
p =
我正在编写一个python脚本,将输出打印到屏幕(linux shell)中,并且使用彩色打印它。有没有办法知道输出是否进入文件?
示例:
script.py parms
这在shell中给了我很好的彩色输出。
现在,如果我这样做:
script.py parms > output.txt
当我打开文件时,我看到奇怪的ASCII字符(颜色值),我尝试在几个文本编辑器中打开它(凯特,gedit)。
我想做一些类似的事情:
if goesIntoFile:
print in black
else:
print in color
我该怎么做呢?
如何在python中派生或打开一个子进程,并实时处理其输出?该子进程根据其他系统事件随机打印输出。
这个“示例”挂起了:
$./print.sh | ./echo.py挂起。
print.sh
#!/bin/bash
while [ 1 ]; do
echo 'A'
sleep 1
done
echo.py
#!/usr/bin/python
import sys
for line in sys.stdin:
print line
我以为我将使用以下代码从QProcess获得输出:
// Start the process
process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite);
// Wait for it to start
if(!process.waitForStarted())
return 0;
// Continue reading the data until EOF reached
QByteArray data;
while(process.waitForReadyRead())
data.app
我希望能够从java执行外部命令,例如"ls",并获得输出,包括输出和错误流,作为一个字符串,并实时地,以它们生成的顺序。
因此,如果命令的输出类似于:
blah <- to stdout
foo <- to stderr
bar <- to stdout
然后,理想情况下,我希望输出字符串和实时输出如下所示:
blah
foo
bar
朴素的方法产生以下两种结果:
blah
bar
(即无stderr输出)
或者:
blah
bar
foo
(即顺序被重新排列,使得标准输出和标准错误消息不相互交错)。
我正在尝试编写一个简单的time命令行程序的Python版本,只不过它不是向shell显示实际的/usr/sys时间,而是将其记录到一个数据库中。
我目前拥有的是:
wrapper.py
#!/usr/bin/python
import sys
from subprocess import Popen, PIPE
cmd = 'time ' + (' '.join(['"%s"' % v if ' ' in v else v for v in sys.argv[1:]]))
p = Popen(cmd, shell
我使用的是python版本2.7.9,当我尝试从Popen进程读取一行时,它会一直坚持到进程结束。在它结束之前,我如何从stdin中读到它?
如果输入是'8200‘(正确的密码),那么它会打印输出。但是如果密码从'8200‘改为’8200‘,那么为什么没有输出?
子流程源代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char password[10];
int num;
do
{
printf("Enter the pass
我试图将命令python --version的输出分配给批处理脚本中的一个变量,但它不起作用。下面是我使用的示例代码
FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO (
SET message=%%F
)
ECHO %message%
尽管它打印了python的版本,但它并没有分配给变量var。如果我使用另一个命令而不是python --version,那么输出将得到正确的分配。例如,使用dir是有效的。
有什么不对的?
注-
@echo off
set message=Hello
FOR /F "