Get all output from subprocess in python [duplicate]
This question already has an answer here:
Running shell command and capturing the output
14 answers
I'm using python 3.7 on Windows. I'm trying to execute a simple scan command and get its output as a string.
When I execute the command in python I only get the first line:
import subprocess
def execute(command):
proc = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
output = proc.stdout if proc.stdout else proc.stderr
path = "Somepath"
command = ['ecls.exe', '/files', path]
print(execute(command))
WARNING! The scanner was run in the account of a limited user.
But when I run it in the CMD:
ecls.exe /files "SomePath" WARNING! The scanner was run in the account
of a limited user.
ECLS Command-line scanner ...
Command line: /files SomePath
Scan started at: 11/24/18 14:18:11
Scan completed at: 11/24/18 14:18:11 Scan time: 0 sec
(0:00:00) Total: files - 1, objects 1 Infected:
files - 0, objects 0 Cleaned: files - 0, objects 0
I think that the command spawn a child process and it produces the scan output. I also tried to iterate over stdout but got the same output.
EDIT:
I tried other methods like check_output
, Popen
, etc with using PIPE
but I only get the first line of output. I also tried to use shell=True
but didn't make any difference. As I already said the command spawn a child process and I need to capture its output which seems that subprocess
can't do it directly.
python python-3.x subprocess
marked as duplicate by stovfl, Jean-François Fabre
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 20:21
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
Running shell command and capturing the output
14 answers
I'm using python 3.7 on Windows. I'm trying to execute a simple scan command and get its output as a string.
When I execute the command in python I only get the first line:
import subprocess
def execute(command):
proc = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
output = proc.stdout if proc.stdout else proc.stderr
path = "Somepath"
command = ['ecls.exe', '/files', path]
print(execute(command))
WARNING! The scanner was run in the account of a limited user.
But when I run it in the CMD:
ecls.exe /files "SomePath" WARNING! The scanner was run in the account
of a limited user.
ECLS Command-line scanner ...
Command line: /files SomePath
Scan started at: 11/24/18 14:18:11
Scan completed at: 11/24/18 14:18:11 Scan time: 0 sec
(0:00:00) Total: files - 1, objects 1 Infected:
files - 0, objects 0 Cleaned: files - 0, objects 0
I think that the command spawn a child process and it produces the scan output. I also tried to iterate over stdout but got the same output.
EDIT:
I tried other methods like check_output
, Popen
, etc with using PIPE
but I only get the first line of output. I also tried to use shell=True
but didn't make any difference. As I already said the command spawn a child process and I need to capture its output which seems that subprocess
can't do it directly.
python python-3.x subprocess
marked as duplicate by stovfl, Jean-François Fabre
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 20:21
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31
add a comment |
This question already has an answer here:
Running shell command and capturing the output
14 answers
I'm using python 3.7 on Windows. I'm trying to execute a simple scan command and get its output as a string.
When I execute the command in python I only get the first line:
import subprocess
def execute(command):
proc = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
output = proc.stdout if proc.stdout else proc.stderr
path = "Somepath"
command = ['ecls.exe', '/files', path]
print(execute(command))
WARNING! The scanner was run in the account of a limited user.
But when I run it in the CMD:
ecls.exe /files "SomePath" WARNING! The scanner was run in the account
of a limited user.
ECLS Command-line scanner ...
Command line: /files SomePath
Scan started at: 11/24/18 14:18:11
Scan completed at: 11/24/18 14:18:11 Scan time: 0 sec
(0:00:00) Total: files - 1, objects 1 Infected:
files - 0, objects 0 Cleaned: files - 0, objects 0
I think that the command spawn a child process and it produces the scan output. I also tried to iterate over stdout but got the same output.
EDIT:
I tried other methods like check_output
, Popen
, etc with using PIPE
but I only get the first line of output. I also tried to use shell=True
but didn't make any difference. As I already said the command spawn a child process and I need to capture its output which seems that subprocess
can't do it directly.
python python-3.x subprocess
This question already has an answer here:
Running shell command and capturing the output
14 answers
I'm using python 3.7 on Windows. I'm trying to execute a simple scan command and get its output as a string.
When I execute the command in python I only get the first line:
import subprocess
def execute(command):
proc = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
output = proc.stdout if proc.stdout else proc.stderr
path = "Somepath"
command = ['ecls.exe', '/files', path]
print(execute(command))
WARNING! The scanner was run in the account of a limited user.
But when I run it in the CMD:
ecls.exe /files "SomePath" WARNING! The scanner was run in the account
of a limited user.
ECLS Command-line scanner ...
Command line: /files SomePath
Scan started at: 11/24/18 14:18:11
Scan completed at: 11/24/18 14:18:11 Scan time: 0 sec
(0:00:00) Total: files - 1, objects 1 Infected:
files - 0, objects 0 Cleaned: files - 0, objects 0
I think that the command spawn a child process and it produces the scan output. I also tried to iterate over stdout but got the same output.
EDIT:
I tried other methods like check_output
, Popen
, etc with using PIPE
but I only get the first line of output. I also tried to use shell=True
but didn't make any difference. As I already said the command spawn a child process and I need to capture its output which seems that subprocess
can't do it directly.
This question already has an answer here:
Running shell command and capturing the output
14 answers
python python-3.x subprocess
python python-3.x subprocess
edited Nov 25 '18 at 9:55
Masoud
asked Nov 24 '18 at 11:03
MasoudMasoud
5621627
5621627
marked as duplicate by stovfl, Jean-François Fabre
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 20:21
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by stovfl, Jean-François Fabre
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 27 '18 at 20:21
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31
add a comment |
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31
add a comment |
1 Answer
1
active
oldest
votes
As I couldn't find a direct way to solve this problem, with help of this reference, the output can be directed to a text file and then read it back.
import subprocess
import os
import tempfile
def execute_to_file(command):
"""
This function execute the command
and pass its output to a tempfile then read it back
It is usefull for process that deploy child process
"""
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.close()
path = temp_file.name
command = command + " > " + path
proc = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if proc.stderr:
# if command failed return
os.unlink(path)
return
with open(path, 'r') as f:
data = f.read()
os.unlink(path)
return data
if __name__ == "__main__":
path = "Somepath"
command = 'ecls.exe /files ' + path
print(execute(command))
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
As I couldn't find a direct way to solve this problem, with help of this reference, the output can be directed to a text file and then read it back.
import subprocess
import os
import tempfile
def execute_to_file(command):
"""
This function execute the command
and pass its output to a tempfile then read it back
It is usefull for process that deploy child process
"""
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.close()
path = temp_file.name
command = command + " > " + path
proc = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if proc.stderr:
# if command failed return
os.unlink(path)
return
with open(path, 'r') as f:
data = f.read()
os.unlink(path)
return data
if __name__ == "__main__":
path = "Somepath"
command = 'ecls.exe /files ' + path
print(execute(command))
add a comment |
As I couldn't find a direct way to solve this problem, with help of this reference, the output can be directed to a text file and then read it back.
import subprocess
import os
import tempfile
def execute_to_file(command):
"""
This function execute the command
and pass its output to a tempfile then read it back
It is usefull for process that deploy child process
"""
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.close()
path = temp_file.name
command = command + " > " + path
proc = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if proc.stderr:
# if command failed return
os.unlink(path)
return
with open(path, 'r') as f:
data = f.read()
os.unlink(path)
return data
if __name__ == "__main__":
path = "Somepath"
command = 'ecls.exe /files ' + path
print(execute(command))
add a comment |
As I couldn't find a direct way to solve this problem, with help of this reference, the output can be directed to a text file and then read it back.
import subprocess
import os
import tempfile
def execute_to_file(command):
"""
This function execute the command
and pass its output to a tempfile then read it back
It is usefull for process that deploy child process
"""
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.close()
path = temp_file.name
command = command + " > " + path
proc = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if proc.stderr:
# if command failed return
os.unlink(path)
return
with open(path, 'r') as f:
data = f.read()
os.unlink(path)
return data
if __name__ == "__main__":
path = "Somepath"
command = 'ecls.exe /files ' + path
print(execute(command))
As I couldn't find a direct way to solve this problem, with help of this reference, the output can be directed to a text file and then read it back.
import subprocess
import os
import tempfile
def execute_to_file(command):
"""
This function execute the command
and pass its output to a tempfile then read it back
It is usefull for process that deploy child process
"""
temp_file = tempfile.NamedTemporaryFile(delete=False)
temp_file.close()
path = temp_file.name
command = command + " > " + path
proc = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if proc.stderr:
# if command failed return
os.unlink(path)
return
with open(path, 'r') as f:
data = f.read()
os.unlink(path)
return data
if __name__ == "__main__":
path = "Somepath"
command = 'ecls.exe /files ' + path
print(execute(command))
answered Nov 27 '18 at 8:11
MasoudMasoud
5621627
5621627
add a comment |
add a comment |
@stovfl It didn't work for me.
– Masoud
Nov 24 '18 at 15:25
Edit your Question and show what you have tried using the dup link Answer and where you get stuck.
– stovfl
Nov 24 '18 at 16:31