@@ -189,11 +189,16 @@ def exitcode(self):
189
189
@property
190
190
def stdout (self ):
191
191
return self .channel ._exitcodePatternForClean .sub (r'\1' ,self .channel .stdout )
192
- #return self.channel.stdout
193
192
@property
194
193
def stderr (self ):
195
194
return self .channel ._exitcodePatternForClean .sub (r'\1' ,self .channel .stderr )
196
- #return self.channel.stderr
195
+ @property
196
+ def rawstdout (self ):
197
+ return self .channel .rawstdoutForOwner ()
198
+ @property
199
+ def rawstderr (self ):
200
+ return self .channel .rawstderrForOwner ()
201
+
197
202
def trim (self ,text ):
198
203
return self .channel .trim (text )
199
204
@@ -248,6 +253,8 @@ def __init__(self,owner):
248
253
## assign owner's stdout and stderr
249
254
self .owner ._stdout = self .stdoutForOwner
250
255
self .owner ._stderr = self .stderrForOwner
256
+ self .owner ._rawstdout = self .rawstdoutForOwner
257
+ self .owner ._rawstderr = self .rawstderrForOwner
251
258
self .shellToRun = self .owner .shellToRun
252
259
self .stdoutDumpBuf = []
253
260
self .stderrDumpBuf = []
@@ -517,6 +524,13 @@ def stdoutForOwner(self):
517
524
def stderrForOwner (self ):
518
525
## because we no more setup prompt, to strip out prompt is not necessary
519
526
return (self ._exitcodePatternForClean .sub (r'\1' ,self .trim ((b'' .join (self .allStderrBuf )).decode ('utf8' ,'replace' ))))
527
+ def rawstdoutForOwner (self ):
528
+ ## because we no more setup prompt, to strip out prompt is not necessary
529
+ return (b'' .join (self .allStdoutBuf ))
530
+ def rawstderrForOwner (self ):
531
+ ## because we no more setup prompt, to strip out prompt is not necessary
532
+ return (b'' .join (self .allStderrBuf ))
533
+
520
534
def trimedStdoutForOwner (self ):
521
535
## because we no more setup prompt, to strip out prompt is not necessary
522
536
return self .trim ((b'' .join (self .allStdoutBuf )).decode ('utf8' ,'replace' ))
@@ -752,7 +766,6 @@ def sendline(self,line,outputTimeout=None,outputType=None,waitPrompt=None):
752
766
if idx > 0 : self.wait(self.waitingInterval,30)
753
767
'''
754
768
self .send (line + newline )
755
-
756
769
if idx < len (lines ) - 1 :
757
770
## not the last one
758
771
self .waitCommandToComplete (outputTimeout ,waitPrompt )
@@ -855,8 +868,9 @@ def addStderrData(self,newbytes):
855
868
if lines is not None :
856
869
if self .stderrListener :
857
870
self .stderrListener (2 ,[x + bNewline for x in lines ])
858
- sys .stderr .buffer .write (bNewline .join ([self .stderrPrefix + x for x in lines ])+ bNewline )
859
- sys .stderr .buffer .flush ()
871
+ if self .dump2sys :
872
+ sys .stderr .buffer .write (bNewline .join ([self .stderrPrefix + x for x in lines ])+ bNewline )
873
+ sys .stderr .buffer .flush ()
860
874
def close (self ):
861
875
## dump the last content in stdoutDumpBuf and stderrDumpBuf
862
876
## No need to call self.updateStdoutStderr()
@@ -927,10 +941,10 @@ def _win32ReadingStdout():
927
941
def _reading ():
928
942
buffer = {
929
943
self .masterFd [0 ]: self .addStdoutData , #stdout
930
- # self.masterFd[1]: self.addStderrData #stderr
944
+ self .masterFd [1 ]: self .addStderrData #stderr
931
945
}
932
- if len (self .masterFd ) == 2 :
933
- buffer [self .masterFd [1 ]]= self .addStderrData
946
+ # if len(self.masterFd) == 2:
947
+ # buffer[self.masterFd[1]]= self.addStderrData
934
948
#while (not self.closed) and buffer:
935
949
while (self .cp .poll () is None ):
936
950
try :
@@ -976,8 +990,10 @@ def commandTimeout(self):
976
990
return self .owner .commandTimeout
977
991
978
992
def send (self ,s ):
979
- self .log (DEBUG ,f'{ threading .current_thread ().native_id } send:{ [s ]} ' )
993
+ ## disable, sensitive data might be shown
994
+ #self.log(DEBUG,f'{threading.current_thread().native_id} send:{[s]}')
980
995
os .write (self .stdin ,s .encode ('utf-8' ))
996
+ ## this would crashed in linux for pty
981
997
#os.fsync(self.stdin)
982
998
983
999
def close (self ):
0 commit comments