Ik heb het volgende stukje code:
Het moet 2 teksttfiles vergelijken en aangeven of ze wel of niet gelijk zijn. Hiervoor wordt een subproces gestart om zo het diff commando te gebuiken.
De code werkt indien beide files bestaan, maar indien 1 van beide files niet bestaat wordt dat gezien alsof de files gelijk zijn.
Ik had eigenlijk verwacht dat ik dan een errormelding in de stdout string zou krijgen (stderr wordt omgeleid naar stdout). Ook heb ik de return code geprobeerd: bij een fout zou een returncode van 2 of hoger moeten terugkomen (volgens de documentatie van het diff commando). Echter: indien 1 van de 2 files niet bestaat, krijg ik 0 terug: dat is de code voor het geval dat beide files gelijk zijn.Bij 2 ongelijke files krijg ik netjes de correcte returncode 1 terug.
Als ik stderr ook via een PIPE laat lopen en stderr afvraag, is deze in het geval van een niet bestaande file gewoon leeg. Ik had daar eigenlijk een foutmelding verwacht, die je ook krijgt als je het diff commando gewoon vanaf de CLI uitvoert.
Wat zie ik hier over het hoofd?
Python:
1
2
3
4
5
6
7
8
| compare_process = subprocess.Popen(['diff', results_filename, reference_filename], stdout = subprocess.PIPE, stderr = subprocess.STDOUT) stdout = compare_process.communicate()[0] rc = compare_process.returncode print rc # show rc to see if this is correct, unlike the stdout if len(stdout) == 0: str = str + "PASSED" else: str = str + "FAILED" |
Het moet 2 teksttfiles vergelijken en aangeven of ze wel of niet gelijk zijn. Hiervoor wordt een subproces gestart om zo het diff commando te gebuiken.
De code werkt indien beide files bestaan, maar indien 1 van beide files niet bestaat wordt dat gezien alsof de files gelijk zijn.
Ik had eigenlijk verwacht dat ik dan een errormelding in de stdout string zou krijgen (stderr wordt omgeleid naar stdout). Ook heb ik de return code geprobeerd: bij een fout zou een returncode van 2 of hoger moeten terugkomen (volgens de documentatie van het diff commando). Echter: indien 1 van de 2 files niet bestaat, krijg ik 0 terug: dat is de code voor het geval dat beide files gelijk zijn.Bij 2 ongelijke files krijg ik netjes de correcte returncode 1 terug.
Als ik stderr ook via een PIPE laat lopen en stderr afvraag, is deze in het geval van een niet bestaande file gewoon leeg. Ik had daar eigenlijk een foutmelding verwacht, die je ook krijgt als je het diff commando gewoon vanaf de CLI uitvoert.
Wat zie ik hier over het hoofd?
For it is the doom of men that they forget... Huidige en vroegere hardware specs The Z80 is still alive!