Python:如何使用参数运行子进程[已关闭]

jk9hmnmh  于 11个月前  发布在  Python
关注(0)|答案(2)|浏览(88)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。

这个问题是由一个错字或一个无法再重现的问题引起的。虽然类似的问题可能在这里是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
7小时前关闭
Improve this question
我试图将一个命令导入到一个python应用程序中,当在bash shell中执行时,它可以工作,并且是:

./converti.sh nameFileXML

字符串
这是Python程序中的一个,它不起作用

if i.endswith(".xml") or i.endswith(".XML"):
    print(i)
    #cmd = './converti.sh'
    #os.system("converti.sh < tempFile") 
    #subprocess.Popen(cmd, i, shell=True, executable='/bin/bash')
    subprocess.run('converti.sh',i)


我还尝试了其他方法将其插入到应用程序中,正如你可以从上面的代码中看到的那样,但它们不起作用。在这种特殊情况下,它给了我错误:

Traceback (most recent call last):
File "/home/utente/creaPDF/converti1.py", line 17, in <module>
subprocess.run('converti.sh',i)
File "/usr/lib/python3.10/subprocess.py", line 503, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.10/subprocess.py", line 780, in __init__
raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer


我哪里错了?

7xzttuei

7xzttuei1#

目前我没有一个Linux/ Unix系统,但在wsl上它应该工作类似。我将所有文件存储在同一个文件夹中。你应该能够执行subprocess.run(),参数在列表中:

Python文件:

import subprocess

def read_xml_bashScript():
    result = subprocess.run(['C:/Windows/System32/wsl.exe', '/mnt/d/Daten/scripts/ReadXML.sh', '/mnt/d/Daten/scripts/file.xml'], stdout=subprocess.PIPE)
    print(result.stdout.decode())

if __name__=="__main__":
    read_xml_bashScript()

字符串

Bash脚本-ReadXML.sh:

#!/bin/bash

echo "Bash script!"
echo "Read XML File line by line:"
# Test if file exist in directory
if ! test -f "$1"
then
    echo "File not found"
else
    echo "Found file ( $1 ) successfully"!
fi

# read and print file line by line
while IFS= read -r line
    do
        echo "$line"
    done < "$1"

XML Dummy - file.xml:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <element attrib="1">TEXT</element>
</root>

kxeu7u2r

kxeu7u2r2#

subprocess.run函数要求命令及其参数以列表形式传递。此外,如果要在shell环境中执行命令,则应提供shell=True参数。

import subprocess
import os

for i in your_list_of_files:
    if i.endswith(".xml") or i.endswith(".XML"):
        print(i)
        cmd = ['./converti.sh', i]
        subprocess.run(cmd, shell=True, executable='/bin/bash')

字符串
我将命令字符串替换为一个列表,其中第一个元素是命令(“converti.sh”),第二个元素是参数(文件名“i”)。subprocess.run用于执行命令。shell=True参数用于在shell中运行命令。可执行文件='/bin/bash'参数指定要使用的shell是Bash。这是可选的,但有助于避免不同shell的潜在问题。请确保将您的_list_of_使用包含文件名的实际列表或可迭代对象创建文件。
注意事项:在命令中使用用户提供的输入时要小心,以避免命令注入等安全漏洞。在子进程调用中使用文件名之前,请确保文件名经过适当的清理或验证。

相关问题