Windows memang memiliki analog untuk / dev / stdout, CON:
Saya membayangkan itu masih bekerja, mengingat program "legacy kompatibilitas" Microsoft yang sedang berlangsung.
Ah .. menemukannya. Dukungan Microsoft memberikan daftar nama yang dipesan. Anda tidak dapat memberi nama file nama-nama ini, dan mereka memiliki arti khusus ketika digunakan sebagai input atau output.
Anda mungkin dapat menggunakan CON sebagai perangkat keluaran untuk mengirim ke stdout.
Daftar:
Name Function
---- --------
CON Keyboard and display
PRN System list device, usually a parallel port
AUX Auxiliary device, usually a serial port
CLOCK$ System real-time clock
NUL Bit-bucket device
A:-Z: Drive letters
COM1 First serial communications port
LPT1 First parallel printer port
LPT2 Second parallel printer port
LPT3 Third parallel printer port
COM2 Second serial communications port
COM3 Third serial communications port
COM4 Fourth serial communications port
Terima kasih, ini benar-benar berfungsi (bahkan di Win 8.1). Kami menjalankan membangun dengan Unity, dalam modus batch: Unity.exe -batchmode -projectPath C:\***\Application -logFile -buildWebPlayer web -quit. Tanpa argumen (nama file) ke -logFile- itu harus mencetak output ke konsol, tetapi tidak. Setelah menambahkan CON (yaitu - -logFile CON) - tidak :-)
setevoy
@setevoy ini benar-benar berfungsi untuk Anda dengan Unity di Windows? Bisakah Anda memberikan lebih banyak detail? Hanya menyebabkan Unity crash untuk saya di Windows 7 dan 10 menggunakan Unity.exe -batchmode -quit -projectPath "%cd%" -logFile CON -buildWindows64Player ".\GameBuild\Generic.exe". Perintah berfungsi dengan baik tanpa file log tapi saya tidak mendapatkan output build.
bbodenmiller
@bbodenmiller Maaf, tetapi tidak dapat memberikan informasi lebih lanjut - proyek ini selesai hampir 2 tahun lalu :-)
Jawabannya salah. Perangkat CON ditampilkan. Menulis ke CON tidak dapat diarahkan (seperti di program > file.txt) atau digunakan dalam pipa (untuk meneruskan data ke stdin program lain seperti di program | another_program). Output yang ditulis ke CON selalu ditampilkan. Jawaban yang benar adalah "Windows tidak memiliki yang setara dengan / dev / stdout"
Egor Skriptunoff
5
Windows tidak memiliki padanan langsung dengan /dev/stdout.
Ini adalah usaha saya untuk menulis program C # yang membuat pipa bernama , yang dapat diberikan kepada program A sebagai nama file. Membutuhkan .NET v4.
(C # karena kompiler dilengkapi dengan .NET runtime, dan komputer apa yang tidak memiliki .NET akhir-akhir ini?)
PipeServer.cs
using System;
using System.IO;
using System.IO.Pipes;
class PipeServer {
static int Main(string[] args) {
string usage = "Usage: PipeServer <name> <in | out>";
if (args.Length != 2) {
Console.WriteLine(usage);
return 1;
}
string name = args[0];
if (String.Compare(args[1], "in") == 0) {
Pipe(name, PipeDirection.In);
}
else if (String.Compare(args[1], "out") == 0) {
Pipe(name, PipeDirection.Out);
}
else {
Console.WriteLine(usage);
return 1;
}
return 0;
}
static void Pipe(string name, PipeDirection dir) {
NamedPipeServerStream pipe = new NamedPipeServerStream(name, dir, 1);
pipe.WaitForConnection();
try {
switch (dir) {
case PipeDirection.In:
pipe.CopyTo(Console.OpenStandardOutput());
break;
case PipeDirection.Out:
Console.OpenStandardInput().CopyTo(pipe);
break;
default:
Console.WriteLine("unsupported direction {0}", dir);
return;
}
} catch (IOException e) {
Console.WriteLine("error: {0}", e.Message);
}
}
}
Kompilasi dengan:
csc PipeServer.cs /r:System.Core.dll
csc dapat ditemukan di %SystemRoot%\Microsoft.NET\Framework64\<version>\csc.exe
Misalnya, menggunakan .NET Client Profile v4.0.30319 pada Windows XP 32-bit:
+1 Sekarang itu solusi keren! Saya akan segera mencobanya dan memberi tahu Anda. Sekarang, pertama beberapa Zzzzzzz :-)
Jeroen Wiert Pluimers
Satu lagi pemikiran sebelum melakukan Zzzz: bagaimana dengan menutup pipa? Saya akan berpikir tentang mekanisme pensinyalan terbaik untuk programonemengatakan pipe, bahwa hal itu dilakukan dengan\\.\pipe\foo
Jeroen Wiert Pluimers
@ Joen: Ketika programoneselesai menghasilkan data, itu hanya akan menutup file output yang digunakannya. (Dari sisi klien, pipa bekerja dengan cara yang sama seperti file biasa.) Ketika melakukannya, pipe.exe- lebih tepatnya, pipe.CopyTo(...)- akan mencapai EOF dan cukup keluar.
user1686
@ Joen: Juga, ada satu hal yang belum saya ketahui: ketika menggunakan alat di arah yang berlawanan ( out) (salin stdin ke pipa), ia mati dengan kesalahan "Pipa rusak" setelah 1 kB pertama. Namun, tidak terjadi saat menyalin pipa ke stdout ( in), jadi itu tidak akan memengaruhi program Anda. (Seperti yang mereka katakan, tambalan selamat datang. )
user1686
terima kasih akan mencoba minggu depan nanti, sesuatu dalam proyek ini datang dengan prio yang lebih tinggi (jangan Anda suka proyek TI <g>)
Jeroen Wiert Pluimers
4
Berdasarkan grawity jawaban , saya telah membuat versi tambahan yang memungkinkan proses dimulai secara langsung tanpa harus menggunakan banyak terminal windows.
String "{pipe}" kemudian diganti oleh jalur redirection.
Contoh Dunia Nyata:
PipeServer.exe in "C:\Keil\UV4\Uv4.exe" -b "C:\Project\Project.uvproj" -j0 -o "{pipe}"
Baris perintah ini dapat dimasukkan secara langsung ke dalam, misalnya, Eclipse untuk mengarahkan kembali log build dari builder eksternal tertentu ke StdOut.
Unity.exe -batchmode -projectPath C:\***\Application -logFile -buildWebPlayer web -quit
. Tanpa argumen (nama file) ke-logFile
- itu harus mencetak output ke konsol, tetapi tidak. Setelah menambahkan CON (yaitu --logFile CON
) - tidak :-)Unity.exe -batchmode -quit -projectPath "%cd%" -logFile CON -buildWindows64Player ".\GameBuild\Generic.exe"
. Perintah berfungsi dengan baik tanpa file log tapi saya tidak mendapatkan output build.program > file.txt
) atau digunakan dalam pipa (untuk meneruskan data ke stdin program lain seperti diprogram | another_program
). Output yang ditulis ke CON selalu ditampilkan. Jawaban yang benar adalah "Windows tidak memiliki yang setara dengan / dev / stdout"Windows tidak memiliki padanan langsung dengan
/dev/stdout
.Ini adalah usaha saya untuk menulis program C # yang membuat pipa bernama , yang dapat diberikan kepada program A sebagai nama file. Membutuhkan .NET v4.
(C # karena kompiler dilengkapi dengan .NET runtime, dan komputer apa yang tidak memiliki .NET akhir-akhir ini?)
PipeServer.cs
Kompilasi dengan:
csc
dapat ditemukan di%SystemRoot%\Microsoft.NET\Framework64\<version>\csc.exe
Misalnya, menggunakan .NET Client Profile v4.0.30319 pada Windows XP 32-bit:
Lari:
di jendela satu, dan:
di jendela dua.
sumber
programone
mengatakanpipe
, bahwa hal itu dilakukan dengan\\.\pipe\foo
programone
selesai menghasilkan data, itu hanya akan menutup file output yang digunakannya. (Dari sisi klien, pipa bekerja dengan cara yang sama seperti file biasa.) Ketika melakukannya,pipe.exe
- lebih tepatnya,pipe.CopyTo(...)
- akan mencapai EOF dan cukup keluar.out
) (salin stdin ke pipa), ia mati dengan kesalahan "Pipa rusak" setelah 1 kB pertama. Namun, tidak terjadi saat menyalin pipa ke stdout (in
), jadi itu tidak akan memengaruhi program Anda. (Seperti yang mereka katakan, tambalan selamat datang. )Berdasarkan grawity jawaban , saya telah membuat versi tambahan yang memungkinkan proses dimulai secara langsung tanpa harus menggunakan banyak terminal windows.
Penggunaan umum:
PipeServer [in|out] [process name] [argument 1] [argument 2] [...]
String "{pipe}" kemudian diganti oleh jalur redirection.
Contoh Dunia Nyata:
PipeServer.exe in "C:\Keil\UV4\Uv4.exe" -b "C:\Project\Project.uvproj" -j0 -o "{pipe}"
Baris perintah ini dapat dimasukkan secara langsung ke dalam, misalnya, Eclipse untuk mengarahkan kembali log build dari builder eksternal tertentu ke StdOut.
Ini mungkin yang terbaik yang didapatnya ...
Tautan
sumber