Index: Lib/subprocess.py =================================================================== --- Lib/subprocess.py (revision 81951) +++ Lib/subprocess.py (working copy) @@ -577,7 +577,11 @@ if result: result.append(' ') - needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or not arg + if arg == "&" or arg == "|": + needquote = False + else: + needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or ("&" in arg) or not arg + if needquote: result.append('"') Index: Lib/test/test_subprocess.py =================================================================== --- Lib/test/test_subprocess.py (revision 81951) +++ Lib/test/test_subprocess.py (working copy) @@ -488,6 +488,12 @@ 'ab ""') self.assertEqual(subprocess.list2cmdline(['echo', 'foo|bar']), 'echo "foo|bar"') + self.assertEqual(subprocess.list2cmdline(['echo', 'foo', '|', 'bar']), + 'echo foo | bar') + self.assertEqual(subprocess.list2cmdline(['echo', 'foo&bar']), + 'echo "foo&bar"') + self.assertEqual(subprocess.list2cmdline(['echo', 'foo', '&', 'bar']), + 'echo foo & bar') def test_poll(self):