homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ncoghlan
Recipients alex, cvrebert, eric.araujo, ncoghlan, pitrou
Date 2011年11月08日.12:59:23
SpamBayes Score 9.143863e-06
Marked as misclassified No
Message-id <1320757164.66.0.843080550039.issue13238@psf.upfronthosting.co.za>
In-reply-to
Content
After working on the documentation updates to the subprocess module to emphasise the convenience functions, I've now changed my mind and think it makes sense to keep these additions in that module.
Now that the shell helpers will default to using shlex.quote() and require the "!u" conversion specifier to bypass that behaviour, and also will have distinct names from the ordinary non-shell based versions, my original concerns that lead to me wanting to keep them out of subprocess no longer apply. That means the general preference that subprocess be our "one stop shop" for explicit subprocess invocation can once again take precedence.
I'm actually planning to change the API a bit though, dropping "shell_format" and "shell_format_map" in favour of the following helper class:
 class ShellCommand:
 def __init__(self, command, *, **callkwds):
 self.command = command
 self.callkwds = callkwds
 def format(self, *args, **kwds):
 return _ShellFormatter().vformat(_fmt, args, kwds)
 def format_map(self, mapping):
 return _ShellFormatter().vformat(_fmt, (), mapping)
 def call(self, *args, **kwds):
 if args or kwds:
 cmd = _ShellFormatter().vformat(cmd, args, kwds)
 return subprocess.call(cmd, shell=True, **self.callkwds)
 def check_call(self, *args, **kwds):
 if args or kwds:
 cmd = _ShellFormatter().vformat(cmd, args, kwds)
 return subprocess.check_call(cmd, shell=True, **self.callkwds)
 def shell_output(cmd, *args, **kwds):
 if args or kwds:
 cmd = _ShellFormatter().vformat(cmd, args, kwds)
 data = subprocess.check_output(cmd, shell=True, universal_newlines=True)
 if data[-1:] == "\n":
 data = data[:-1]
 return data
The module level helpers would then just become re module style wrappers:
 def shell_call(command, *args, **kwds):
 return ShellCommand(command).shell_call(*args, **kwds)
 def check_shell_call(command, *args, **kwds):
 return ShellCommand(command).check_shell_call(*args, **kwds)
 def shell_output(command, *args, **kwds):
 return ShellCommand(command).shell_output(*args, **kwds)
History
Date User Action Args
2011年11月08日 12:59:24ncoghlansetrecipients: + ncoghlan, pitrou, eric.araujo, alex, cvrebert
2011年11月08日 12:59:24ncoghlansetmessageid: <1320757164.66.0.843080550039.issue13238@psf.upfronthosting.co.za>
2011年11月08日 12:59:24ncoghlanlinkissue13238 messages
2011年11月08日 12:59:23ncoghlancreate

AltStyle によって変換されたページ (->オリジナル) /