46 lines
No EOL
2.6 KiB
Python
46 lines
No EOL
2.6 KiB
Python
|
|
import ops.cmd
|
|
import ops
|
|
import ops.env
|
|
import ops.cmd.safetychecks
|
|
from ops.cmd import getBoolOption, setBoolOption, getValueOption, setListOption, setStringOption
|
|
OpsCommandException = ops.cmd.OpsCommandException
|
|
VALID_OPTIONS = ['command', 'redirect', 'noinput', 'wait', 'input', 'output', 'directory', 'allowdsz', 'background']
|
|
|
|
class RunCommand(ops.cmd.DszCommand, ):
|
|
|
|
def __init__(self, plugin='run', command=None, **optdict):
|
|
ops.cmd.DszCommand.__init__(self, plugin, **optdict)
|
|
self.command = command
|
|
|
|
def validateInput(self):
|
|
for opt in self.optdict:
|
|
if (opt not in VALID_OPTIONS):
|
|
return False
|
|
if (opt == 'command'):
|
|
cmdstr = self.optdict['command']
|
|
cmdstr = cmdstr.strip()
|
|
if (cmdstr[0] != '"'):
|
|
cmdstr = ('"' + cmdstr)
|
|
if (cmdstr[(-1)] != '"'):
|
|
cmdstr += '"'
|
|
if (cmdstr[(-2)] == '"'):
|
|
cmdstr = (cmdstr[:(-1)] + ' "')
|
|
lastquote = cmdstr.find('"', 1)
|
|
while (lastquote < (len(cmdstr) - 1)):
|
|
if (cmdstr[(lastquote - 1)] != '\\'):
|
|
cmdstr = ((cmdstr[:lastquote] + '\\') + cmdstr[lastquote:])
|
|
lastquote = cmdstr.find('"', (lastquote + 1))
|
|
self.optdict['command'] = cmdstr
|
|
return True
|
|
noinput = property((lambda x: getBoolOption(x, 'noinput')), (lambda x, y: setBoolOption(x, y, 'noinput')))
|
|
wait = property((lambda x: getBoolOption(x, 'wait')), (lambda x, y: setBoolOption(x, y, 'wait')))
|
|
redirect = property((lambda x: getBoolOption(x, 'redirect')), (lambda x, y: setBoolOption(x, y, 'redirect')))
|
|
allowdsz = property((lambda x: getBoolOption(x, 'allowdsz')), (lambda x, y: setBoolOption(x, y, 'allowdsz')))
|
|
background = property((lambda x: getBoolOption(x, 'background')), (lambda x, y: setBoolOption(x, y, 'background')))
|
|
input = property((lambda x: getValueOption(x, 'input')), (lambda x, y: setListOption(x, y, 'input', ['ascii', 'oem', 'unicode', 'utf8'])))
|
|
output = property((lambda x: getValueOption(x, 'output')), (lambda x, y: setListOption(x, y, 'output', ['ascii', 'auto', 'oem', 'unicode', 'utf8'])))
|
|
command = property((lambda x: getValueOption(x, 'command')), (lambda x, y: setStringOption(x, y, 'command')))
|
|
directory = property((lambda x: getValueOption(x, 'directory')), (lambda x, y: setStringOption(x, y, 'directory')))
|
|
ops.cmd.command_classes['run'] = RunCommand
|
|
ops.cmd.aliasoptions['run'] = VALID_OPTIONS |