Befehle, die von LISP aufgerufen werden, haben Probleme mit gepufferten IO-Streams, wie kann man sie ausschalten? Ich habe nur Spülfunktionen gefunden, die in dieser Situation nichts bringen.IO-Pufferung ausschalten
Antwort
Sie können nicht tun,
Es gibt keine tragbare Art und Weise Pufferung ein- und ausgeschaltet, und für einen sehr guten Grund: gepuffert i/o Größenordnungen schneller ist.
Sie sollten nicht versuchen zu tun, dass
Sie könnten in der Lage sein, um herauszufinden, wie es Sie bei der Umsetzung tun zu verwenden, aber es wird eine Verschwendung von Zeit - Sie werden bald erkennen, dass es ein Fehler war, . Bitte tu dir selbst einen Gefallen und verfolge meine Schritte nicht - das habe ich vor fast 20 Jahren versucht.
Es gibt einen besseren Weg
Wenn Sie mit dem Schreiben fertig sind, nur flush the output.
Sie können dies mithilfe von Klassen oder Makros kapseln, sodass keine zusätzliche Typisierung erforderlich ist.
Es ist besser, aus vielen Gründen
Bitte beachten Sie, dass der Ansatz, den ich vorschlagen, wird der Code besser lesbar machen - es erfordert, dass Sie Ihre Nachricht Grenzen explizit angeben. Denken Sie daran, Sie schreiben Code für andere (und Sie selbst in 6 Monaten!) Zu lesen, zu ändern und zu debuggen.
Danke, aber wie man das macht, wenn funtion run-Befehl für Shell-Skript redirect io von Befehl zu lisp io Streams, kann ich sie nicht flush, weil ich weiß nicht, wenn Befehl ausführen lesen/schreiben – Seraph
Okay, das ist eine sehr spezifische Situation: _usual_ Shell-Befehle (zB 'ls') und Lisp-Shell-Pipes sind _line_ gepuffert und dies ist genau das, was Sie wollen. Wenn dies nicht der Fall ist, fragen Sie bitte eine * separate * Frage mit einem reproduzierbaren Beispiel. – sds
@Seraph Haben Sie Probleme mit "Input Buffering" oder "Output Buffering"? Das heißt, bleibst du hängen, weil etwas, das du in den Befehl schreibst, nicht an sie gesendet wird ('finish-output' und Freunde sollten hier helfen) oder bleibst du stecken und lest etwas, das der erzeugte Befehl gedruckt hat? Wenn es Letzteres ist, wird es wahrscheinlich durch den Befehl gepuffert, nicht durch die Pipe oder Lisp-Umgebung. – Vatine
So fand ich endlich das Problem (vielleicht Fehler ??)
Formular sieht wie folgt aus (SBCL API)
(run-program "sudo" '("mv" "foo.txt" "/usr/bin")
:search t
:output t
:input t
:wait t)
Das funktioniert genau, wie ich wollte, war Problem, dass anstelle von t in Eingang und Ausgang Args, ich spezifizierte *standard-input*
und *standard-output*
, die nicht ordnungsgemäße Arbeit des Befehls verursacht (wenn aufgerufen Programm wollte einige Eingabe von Benutzer wie sudo zum Beispiel).
Keine Ahnung warum, aber zumindest funktioniert es jetzt.
- 1. Lichter ausschalten
- 2. iPhone: Wie kann ich das iPhone ausschalten/ausschalten/Ereignis/Benachrichtigung ausschalten?
- 3. Ausschalten Jersey Protokollierung programmatisch
- 4. Tomcat-Protokollierung ausschalten
- 5. Windows-Box ausschalten C#
- 6. Ein-/Ausschalten des Monitors
- 7. Ausschalten android.permission.INTERNET in CodenameOne
- 8. Push-Benachrichtigungen ausschalten
- 9. Subdomains in phpfastcache ausschalten
- 10. Ton ein-/ausschalten
- 11. Ausschalten von CLANG_ENABLE_MODULE_DEBUGGING Konsequenzen
- 12. Ausschalten eines ExecutorService
- 13. Phonegap ein-/ausschalten Lichtbild
- 14. Jquery ein- und ausschalten
- 15. Ausschalten von ConfigurationItems
- 16. Poltergeist - Ausschalten JQMIGRATE Warnungen
- 17. Bildschirm ausschalten mit Annäherungssensor
- 18. Einen Objekt-Prototyp ausschalten
- 19. Stemming ein-/ausschalten
- 20. Eclipse-Validierung ausschalten
- 21. Flash ein-/ausschalten
- 22. Programmatisch Android-Telefon ausschalten
- 23. youtube-Prozess ausschalten
- 24. Ausschalten in mule
- 25. Rechte Bildschirmlupe (VScode) ausschalten
- 26. Ausschalten Android Dinge
- 27. UIPrintInteractionController, ausschalten Doppelseitige Option?
- 28. Wie netbeans Begrüßungsbildschirm ausschalten?
- 29. Android: Display ausschalten
- 30. iPhone durch Programmierung ausschalten
Könnten Sie weitere Details hinzufügen, bitte, welche Befehle, wie aufgerufen, welche Art von Ärger? – cybevnm
* "... in dieser Situation" *. Welche Situation? – coredump
Shell-Befehl, um genau zu sein – Seraph