Improve shell argument parsing
For example, this patch fixes the command "df | awk '{print $1}'"
This commit is contained in:
parent
0a78e571fd
commit
9324774208
@ -21,19 +21,18 @@ class RawCommand(BaseCommand):
|
||||
with the builtin subprocess module. Each output object is just a tree node
|
||||
whose data is a simple string."""
|
||||
|
||||
def __init__(self, cmd, input_generator=[], args=tuple()):
|
||||
def __init__(self, cmd, input_generator=[]):
|
||||
self.input_generator = input_generator
|
||||
self.cmd = cmd
|
||||
self.args = args
|
||||
|
||||
def __call__(self, input_generator=[], *args, **kwargs):
|
||||
import subprocess
|
||||
try:
|
||||
p = subprocess.Popen((self.cmd,) + self.args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
p = subprocess.Popen(self.cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
def output_generator():
|
||||
input_str = b""
|
||||
for line in input_generator:
|
||||
input_str += line
|
||||
input_str += line + b'\n'
|
||||
outs, errs = p.communicate(input_str)
|
||||
if outs:
|
||||
yield outs
|
||||
|
7
main.py
7
main.py
@ -4,6 +4,8 @@ from example_cmd import example_cmd, echo
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import shlex
|
||||
|
||||
for path in os.environ['PATH'].split(':'):
|
||||
if os.path.exists(path):
|
||||
binaries = os.listdir(path)
|
||||
@ -25,10 +27,7 @@ def parse_cmd(potential_cmd):
|
||||
if args:
|
||||
args = args[1:]
|
||||
if cmd_name not in registered_cmds:
|
||||
if args:
|
||||
return "RawCommand('{}', args={})".format(cmd_name, str(tuple(args)))
|
||||
else:
|
||||
return "RawCommand('{}')".format(cmd_name)
|
||||
return "RawCommand({})".format(shlex.split(potential_cmd))
|
||||
else:
|
||||
return "{}()".format(cmd_name)
|
||||
|
||||
|
Reference in New Issue
Block a user