foo 2> & 1 bedeutet die gesamte Ausgabe umleiten, einschließlich Griff 2 (das heißt, STDERR), aus dem foo Befehl 1 zu handhaben (das heißt, STDOUT)
so hier raus! = Foo 2> & 1 vielleicht gut genug. unten ist die Demo:
egg.py:
#!/usr/bin/env python
# -*- coding: utf8 -*-
def main():
print 'hello'
print 3/0
if __name__ == "__main__":
main()
IPython 0,10
In [5]: out = !egg.py
Traceback (most recent call last):
File "D:\python\note\egg.py", line 7, in <module>
main()
File "D:\python\note\egg.py", line 5, in main
print 3/0
ZeroDivisionError: integer division or modulo by zero
In [6]: out
Out[6]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available):
0: hello
In [7]: out = !egg.py 2>&1
In [8]: out
Out[8]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available):
0: hello
1: Traceback (most recent call last):
2: File "D:\python\note\egg.py", line 7, in <module>
3: main()
4: File "D:\python\note\egg.py", line 5, in main
5: print 3/0
6: ZeroDivisionError: integer division or modulo by zero
hoffe, das hilft
sunqiang: UNIX, diese Art der Umleitung hatte (** '2> & 1 '* * zu duplizieren stderr zu stdout, zum Beispiel) lange bevor MS Unterstützung dafür in ihren Systemen hinzufügte. Unter UNIX ist es verallgemeinert (Sie können andere Dateideskriptoren umleiten, duplizieren und schließen, wenn Sie ihre Nummern kennen). –
@ Jim Dennis, danke für die Info. Ich bin nur ein Linux-Neuling. Ich weiß das vorher nicht. Ich habe die Antwort entsprechend bearbeitet. – sunqiang
Danke! Es hilft. – Geo