Python子进程传递文件名参数

0 投票
1 回答
1082 浏览
提问于 2025-04-17 17:37

我知道用subprocess.Popen来做这件事不是最好的方法,但为了节省时间,我就先用这个了。我有一个叫做save_input.cgi的脚本,它通过一个网页应用把文件保存到我的Linux电脑上。当文件保存完后,我需要把这个文件名作为参数传给另一个脚本。我可能遗漏了什么简单的东西,但这是我目前的代码:

#!/usr/bin/python
import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
  # strip leading path from file name to avoid 
  # directory traversal attacks
  fn = os.path.basename(fileitem.filename.replace("\\", "/" ))
  open('/tmp/' + fn, 'wb').write(fileitem.file.read())

  message = 'The file "' + fn + '" was uploaded successfully'
  subprocess.Popen(["python", "mod_check.py", '/tmp/' + fn])      

else:
   message = 'No file was uploaded'

print """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

有什么想法吗?非常感谢,我真的很感激这个社区,哈哈。

*我刚刚更新了代码,把subprocess放进了if fileitem.filename的那一块,但似乎没有把文件名和位置作为参数传给脚本。为了回应另一个评论,是的,如果我手动输入“sudo python mod_check.py filename.txt”,这个脚本是可以工作的。

1 个回答

0

我只是忽略了一个简单的事情。根据jordanm的回答解决了这个问题。我在代码块中加上了'if fileitem.filename'。

撰写回答