Python将两个命令及其输出都写到文件中

问题描述 投票:5回答:2

有没有办法将两个命令及其输出都写入外部文件?

假设我有一个脚本outtest.py

import random
from statistics import median, mean

d = [random.random()**2 for _ in range(1000)]
d_mean = round(mean(d), 2)
print(f'mean: {d_mean}')
d_median = round(median(d), 2)
print(f'median: {d_median}')

现在,如果我只想捕获其输出,我知道我可以做到:

python3 outtest.py > outtest.txt

但是,这只会给我一个outtest.txt文件,例如:

mean: 0.34
median: 0.27

我正在寻找的是一种获取输出文件的方式,例如

import random
from statistics import median, mean

d = [random.random()**2 for _ in range(1000)]
d_mean = round(mean(d), 2)
print(f'mean: {d_mean}')
>> mean: 0.34
d_median = round(median(d), 2)
print(f'median: {d_median}')
>> median: 0.27

或其他某种格式(降价,等等)。本质上,类似于jupyter笔记本Rmarkdown,但使用标准的[[.py文件。

有没有简单的方法可以做到这一点?
python bash markdown
2个回答
0
投票
您可以在打印输出之前将结果分配给变量,以后再将这些值写入文件

这里是示例

import random from statistics import median, mean d = [random.random()**2 for _ in range(1000)] d_mean = round(mean(d), 2) foo = f'mean: {d_mean}' print(foo) d_median = round(median(d), 2) bar = f'median: {d_median}' print(bar) # save to file with open("outtest.txt", "a+") as file: file.write(foo + "\n") file.write(bar + "\n") file.close()

参数“ a +”表示打开文件并将内容附加到文件,而不是如果文件存在则覆盖。

0
投票
您可以调用脚本并检查其输出。不过,您必须做出一些假设。输出仅来自stdout,仅来自包含字符串“ print”的行,并且每个打印仅产生一行输出。在这种情况下,脚本将如下所示:

from sys import argv from subprocess import run, PIPE script = argv[1] r = run('python ' + script, stdout=PIPE) out = r.stdout.decode().split('\n') with open(script, 'r') as f: lines = f.readlines() with open('out.txt', 'w') as f: i = 0 for line in lines: f.write(line) if 'print' in line: f.write('>>> ' + out[i]) i += 1

和输出:

import random from statistics import median, mean d = [random.random()**2 for _ in range(1000)] d_mean = round(mean(d), 2) print(f'mean: {d_mean}') >>> mean: 0.33 d_median = round(median(d), 2) print(f'median: {d_median}') >>> median: 0.24

© www.soinside.com 2019 - 2024. All rights reserved.