我一直在研究Doug Helmann的PYMOPTW上的const express = require('../../node_modules/express');
const app = express();
// default response
app.use('/', (req, res, next) => {
next();
try {
res.send({
profile: {
first_name: 'Aaron',
last_name: 'Pol'
}
});
} catch (e) {
//
}
});
// definite state, where default response can be changed
app.use('/', (req, res) => {
res.send({
profile: {
first_name: 'John',
last_name: 'Pol'
}
});
});
app.listen(9090);
模块示例。这是我遇到的麻烦的代码片段。
subprocess
我知道应该# subprocess_run_output_error.py
import subprocess
try:
completed = subprocess.run(
'echo to stdout; echo to stderr 1>&2; exit 1',
check=True,
shell=True,
stdout=subprocess.PIPE,
)
except subprocess.CalledProcessError as err:
print('ERROR:', err)
else:
print('returncode:', completed.returncode)
print('Have {} bytes in stdout: {!r}'.format(
len(completed.stdout),
completed.stdout.decode('utf-8'))
)
引发错误,并运行except子句。
exit 1
我不明白为什么to stderr
ERROR: Command 'echo to stdout; echo to stderr 1>&2; exit 1' returned non-zero exit status 1.
不是打印出来的,而是to stdout
。 to stderr
运行后没有出现1>&2
吗?
为了更好地理解,我更改了代码以查看是否可以运行echo to stdout
部分,因此将其切换为else
。当我这样做时,我得到的输出是:
exit 0
我似乎不了解to stderr
returncode: 0
Have 10 bytes in stdout: 'to stdout\n'
的含义,尽管去了cheatsheets。
再次打印1>2
。为什么to stderr
自出现以来就没有被首先打印出来?
为什么to stdout
对象仅保留CompletedProcess
而不是to stderr
?
to stdout
的文件描述符为to stderr
时不发送到标准错误流?n>&m#使文件描述符n成为输出文件的副本 描述符
我发现与此相对较近的另一个问题是this。但是,它正在比较2
和&>
。我无法理解最初的>&
,因此感到更加困惑。
答案 0 :(得分:1)
completed.stdout
上找到它。stdout=subprocess.PIPE
,但没有捕获stderr=subprocess.PIPE