f = urllib.urlopen(url) #Download the file
localFile = open(url.split('/')[-1],'w')
localFile.write(f.read())
os.system("transmission %s" %localFile)
错误我得到的是这样的:文件错误的意外结束,同时通过使用os.system打开文件
sh: Syntax error: end of file unexpected
512
f = urllib.urlopen(url) #Download the file
localFile = open(url.split('/')[-1],'w')
localFile.write(f.read())
os.system("transmission %s" %localFile)
错误我得到的是这样的:文件错误的意外结束,同时通过使用os.system打开文件
sh: Syntax error: end of file unexpected
512
你的问题可能是localfile
包含一些容易混淆的字符,这使得外壳认为它应该得到更多信息。
试试,如果
import subprocess
subprocess.call(['transmission', localFile])
改变的情况。
编辑:这当然是无稽之谈。
import subprocess
subprocess.call(['transmission', url.split('/')[-1]])
应该是走的路上,与存储url.split('/')[-1]
成然后可以替换表达式的两次出现的变量。
尽管如此,使用os.system()
可能是危险的。最好留在subprocess.call()
。
localFile
变量不包含文件名,而是包含文件句柄。文件句柄是标识文件的数字值,仅在当前执行过程中有效。但transmission
等待文件名作为其参数,而不是文件句柄。
调用os.system()
当尝试使用文件名作为参数传递给transmission
:
filename = url.split('/')[-1]
localFile = open(filename,'w')
localFile.write(f.read())
localFile.close()
os.system("transmission %s" %(filename,))
(也不要忘记关闭文件,当你写完了数据)
是的。我弄错了。感谢您的及时回复。纠正它。 – Hick
你确定你正在做你想做的事?
我看到你打开一个文件并调用系统命令transmission <open file 'somename', mode 'w' at 0x16824b0>
,或者至少这是你通过转换文件d得到的。根据我的字符串,这并没有太大的意义,我
它的工作。但必须对其进行一些更改。而不是去subprocess.call(['传输',localFile]),我去了subprocess.call(['传输',URL])。 – Hick
为什么使用os.system会有危险?好奇,因为我经常在工作中使用它。 – Hick
您提供的文件名可能包含使命令行的解释与您想象的不同的字符。请注意,在类UNIX系统上,允许文件名包含除NUL字节和/以外的所有字符(因为后者用于路径分离)。如果你的文件现在被命名为'; rm -rf〜',你恰好执行'传输; rm -rf〜'这可能根本就不是你想要的。 – glglgl