TypeError: cannot concatenate 'str' and 'NoneType' - Objekte
save = "/root/foo/"
PERF_PATH="/root/foobar/"
Also, Zunächst hatte ich die variable save
und perf_path
im cmd
. aber jetzt möchte ich Sie ersetzen es für eine verbesserte Lesbarkeit.
Ich wollte einen Ordner erstellen, in dem die variable app[a]
irgendwann werden gespeichert.
direc = os.mkdir(save + i + "-"+ j +"-" + k + "-" +l)
Erstellen Sie ein Verzeichnis scheint nicht zu einem problem.
aber der Beitritt zu einer nicht-string-Wert variable auf eine Zeichenfolge scheint ein problem zu sein.
cmd = "taskset -c %s" + PERF_PATH + "perf2 stat -t %s e r4008387e1 -f -o" +save + direc + "%s.csv &" % (cpus_list[a],fpid[a],apps[a])
pro= subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, preexec_fn=os.setsid)
TypeError: cannot concatenate 'str' and 'NoneType' objects
cmd = "taskset -c %s" + str(PERF_PATH) + "perf2 stat -t %s e r4008387e1 -f -o" +str(save) + str(direc) + "%s.csv &" % (cpus_list[a],fpid[a],apps[a])
dass war nicht viel helfen, entweder.
irgendwelche Ideen, wie ich dieses Problem lösen?
- Die Fehlermeldung sagt Ihnen, dass eine der Variablen, die Sie versuchen hinzuzufügen, ist
None
. Herauszufinden, welches es ist. - Aber dann, sobald Sie Vergangenheit, die Fehler, Sie gehen zu bekommen eine
TypeError: not all arguments converted during string formatting
. Das problem dort ist, dass%
hat eine höhere Priorität als+
, aber das eigentliche problem ist, dass du versuchst zu mischen, string-Verkettung und die%
Formatierung zusammen in der gleichen Zeit, die ist schwer zu bekommen Recht, und noch schwerer zu Lesen, auch wenn Sie ihm Recht erhalten. Nur eine oder das andere—im Idealfall%
formatieren, oder, noch besser,{}
Formatierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
os.mkdir()
nichts zurück, sodirec
auf None gesetzt ist.Tun Sie dies:
Sie wirklich wollen, zu verwenden
os.path.join()
- und string-Formatierung zu bauen Wege, obwohl, es wird viel einfacher zu Lesen:Für
subprocess.Popen()
übergeben Sie in einer Liste statt string für den Befehl und Argumente und lassenshell
auf den Standardwert vonFalse
gibt es keine Notwendigkeit zu haben, die shell-handle:TypeError: not all arguments converted during string formatting
es hat immer noch dieses problem. das ist etwas, was ich nicht zu begreifen scheinen. Alles ist eine string-variableos.join
ist es nicht.. ich denke, versuchen zu sagen:os.path.join
os.system(str(cmd))
sh: [taskset,: command not found
das ist die Fehlermeldung, die ich bekomme.os.system()
- stick mitsubprocess
.str(cmd)
geben Sie eine Zeichenfolge beginnend mit['taskset', ...]
, nicht eine shell-kompatiblen Befehl.TypeError: execv() arg 2 must contain only strings
- dies ist die Fehlermeldung bekomme ich mit dem, was du gesagt hast ... scheint ein encoding-Problem.cpus_list[a]
eine Zeichenfolge oder etwas anderes? Wenn nicht, verwenden Siestr(cpus_list[a])
statt. Dasselbe für die anderen Elemente in der Liste.os.mkdir gibt Keine.
Versuchen, fügen Sie eine Zeichenfolge, die eine None ist ein Nein, Nein. Wenn Sie bauen wollen, bis ein string aus verschiedenen Arten versuchen Sie es mit format:
Diese Weise ist viel besser lesbar, damit debug-Version einer sowieso