Bash "Syntax error: end of file unexpected" when called from Python's (2.7) subprocess.call()
Bash "Syntax error: end of file unexpected" when called from Python's (2.7) subprocess.call()
我有一个 python
(v2.7) 脚本需要在写入文件(如果存在)之前清除文件的内容。我能够在命令行上毫无问题地执行 'same' 命令,但是从 python
调用此命令的变体时出现 python
或 bash
错误.不知道我错过了什么。
终极问题: 如何使用来自 Python (v2.7) 的系统调用创建一个空文件(或清除,如果存在)?
Bash(成功创建空文件或清除现有文件)
$ > test.txt
$ ls -l test.txt
-rw-rw-r--+ 1 <owner> <group> 0 Feb 9 11:26 test.txt
Python(w/o `shell=True';失败并出现错误)
我在没有使用 shell=True
的情况下收到以下错误:OSError: [Errno 2] No such file or directory
。 Another post 建议如果我将所有参数作为单独的字符串参数传递,我不应该得到这个错误。不确定为什么会出现此错误。
$ python
>>> import subprocess
>>> subprocess.call(['>', 'test.txt']) # Same result w/ single/double quotes
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Python(带“shell=True”;失败并出现错误)
我尝试根据其他 post 的建议添加 shell=True
(应该不会有安全风险,因为该命令是静态的),但我收到以下 bash
错误:Syntax error: end of file unexpected
。我认为它可能需要一个结尾 ;
(可能是因为 python
是如何调用的?),所以我尝试了两次添加一个 ;
参数,但最终结果相同。
$ python
>>> import subprocess
>>> subprocess.call(['>', 'test.txt'], shell=True) # Same result w/ single/double quotes
test.txt: 1: test.txt: Syntax error: end of file unexpected
2
>>> import subprocess
>>> subprocess.call(['>', 'test.txt', ';'], shell=True) # Same result w/ single/double quotes
test.txt: 1: test.txt: Syntax error: end of file unexpected
shell=True
错误
使用它时,给出的命令将被格式化为一个字符串
然后将给出的命令字符串解释为原始 shell 命令
正确的用法应该是这样的:
>>> import subprocess
>>> subprocess.call('> test.txt', shell=True)
0
>>>
# There will now be an empty file called
# 'test.txt' in the same directory
shell=False
错误
您 运行ning 的命令本来是 运行 在 shell 的 之上,但是当使用这种方式时,它会尝试 运行 您的字符串,方法是将其调用为在您的 PATH
中找到的命令
但是,我不知道如何解决你的这部分问题。
我有一个 python
(v2.7) 脚本需要在写入文件(如果存在)之前清除文件的内容。我能够在命令行上毫无问题地执行 'same' 命令,但是从 python
调用此命令的变体时出现 python
或 bash
错误.不知道我错过了什么。
终极问题: 如何使用来自 Python (v2.7) 的系统调用创建一个空文件(或清除,如果存在)?
Bash(成功创建空文件或清除现有文件)
$ > test.txt
$ ls -l test.txt
-rw-rw-r--+ 1 <owner> <group> 0 Feb 9 11:26 test.txt
Python(w/o `shell=True';失败并出现错误)
我在没有使用 shell=True
的情况下收到以下错误:OSError: [Errno 2] No such file or directory
。 Another post 建议如果我将所有参数作为单独的字符串参数传递,我不应该得到这个错误。不确定为什么会出现此错误。
$ python
>>> import subprocess
>>> subprocess.call(['>', 'test.txt']) # Same result w/ single/double quotes
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Python(带“shell=True”;失败并出现错误)
我尝试根据其他 post 的建议添加 shell=True
(应该不会有安全风险,因为该命令是静态的),但我收到以下 bash
错误:Syntax error: end of file unexpected
。我认为它可能需要一个结尾 ;
(可能是因为 python
是如何调用的?),所以我尝试了两次添加一个 ;
参数,但最终结果相同。
$ python
>>> import subprocess
>>> subprocess.call(['>', 'test.txt'], shell=True) # Same result w/ single/double quotes
test.txt: 1: test.txt: Syntax error: end of file unexpected
2
>>> import subprocess
>>> subprocess.call(['>', 'test.txt', ';'], shell=True) # Same result w/ single/double quotes
test.txt: 1: test.txt: Syntax error: end of file unexpected
shell=True
错误
使用它时,给出的命令将被格式化为一个字符串
然后将给出的命令字符串解释为原始 shell 命令
正确的用法应该是这样的:
>>> import subprocess
>>> subprocess.call('> test.txt', shell=True)
0
>>>
# There will now be an empty file called
# 'test.txt' in the same directory
shell=False
错误
您 运行ning 的命令本来是 运行 在 shell 的 之上,但是当使用这种方式时,它会尝试 运行 您的字符串,方法是将其调用为在您的 PATH
中找到的命令但是,我不知道如何解决你的这部分问题。