Điểm:2

Làm cách nào để chuyển hướng đầu ra của 'cat' sang một thư mục khác?

lá cờ us

Tôi có một tập lệnh Python, EulerianCycle.py, và một tập tin đầu vào, euleriancycle.txt.

Tôi có thể nhận được kết quả chính xác bằng cách làm py EulerianCycle euleriancycle.txt > mèo euleriancycleout.txt vào thư mục hiện tại (py là một bí danh cho trăn3).

Tuy nhiên, tôi có một thư mục khác trong thư mục hiện tại này được gọi là đầu ra, mà tôi muốn tất cả các tệp đầu ra của mình được hướng tới.

tôi đã thử py EulerianCycle.py euleriancycle.txt | đầu ra cd/ | mèo > euleriancycleout.txt

py EulerianCycle.py euleriancycle.txt | mèo > đầu ra cd/euleriancycleout.txt

mang lại cho tôi đường ống bị hỏng lỗi.

Điểm:7
lá cờ hr

Nếu py EulerianCycle.py euleriancycle.txt ghi vào luồng đầu ra tiêu chuẩn (mà tôi cho là như vậy, vì nếu không, bạn sẽ không thể chuyển nó sang con mèo) sau đó con mèo hoàn toàn không cần thiết ở đây - bạn có thể trực tiếp chuyển hướng đầu ra tiêu chuẩn, chỉ định đường dẫn tuyệt đối hoặc tương đối tới tệp đầu ra của mình:

py EulerianCycle.py euleriancycle.txt > đầu ra/euleriancycleout.txt

(lưu ý: thư mục đầu ra / phải đã tồn tại).


Cả hai lệnh khác của bạn đều không hoạt động theo cách bạn có thể tưởng tượng.

  • Trong py EulerianCycle euleriancycle.txt > mèo euleriancycleout.txt, trình bao tạo một tệp có tên con mèo trong thư mục hiện tại và chuyển hướng đầu ra của py Chu kỳ Euler với nó, đi qua cả hai euleriancycle.txteuleriancycleout.txt với nó như là đối số đầu vào.

  • Trong py EulerianCycle.py euleriancycle.txt | mèo > đầu ra cd/euleriancycleout.txt, trình bao tạo một tệp có tên đĩa CD trong thư mục hiện tại, con mèo đọc đầu ra/euleriancycleout.txt và ghi nó vào tập tin đĩa CD, bỏ qua đầu vào tiêu chuẩn từ đường ống (con mèo chỉ đọc đầu vào tiêu chuẩn khi nó không được cung cấp tệp đầu vào hoặc thông tin rõ ràng -).

Có lẽ những gì bạn đang hướng tới ở đây là chuyển đầu ra thành một vỏ con Thích:

py EulerianCycle.py euleriancycle.txt | (đầu ra cd; mèo > euleriancycleout.txt)

hoặc

py EulerianCycle.py euleriancycle.txt | (đầu ra cd && cat > euleriancycleout.txt)

Đây, con mèo đọc đầu vào tiêu chuẩn của lớp con - được cung cấp bởi đường ống - sau khi chuyển sang thư mục đích. Phiên bản thứ hai chỉ tạo euleriancycleout.txt nếu đĩa CD lệnh thành công; cái đầu tiên tạo nó trong thư mục hiện tại nếu đĩa CD thất bại.

mook765 avatar
lá cờ cn
Sẽ thật tuyệt nếu bạn có thể thêm điều gì đó về lỗi đường ống bị hỏng ban đầu mà tôi nghĩ xảy ra do `cd`-shell-buildin không chấp nhận std-in.
trinity avatar
lá cờ us
được rồi, điều này có ý nghĩa. Mã của bạn hoạt động như dự định. Tôi cũng đã thấy một tệp ngẫu nhiên có tên "cd" trong cwd. Cảm ơn vì đã giải thích các hành động không chủ ý của các lệnh mà tôi đã thử. đối với @mook765, lỗi đường ống bị hỏng như sau: py EulerianCycle.py euleriancycle.txt | mèo > đầu ra cd/euleriancycleout.txt Traceback (cuộc gọi gần đây nhất cuối cùng): Tệp "/home/user/.../EulerianCycle.py", dòng 39, trong print('->'.join(eulerian_cycle(đồ thị))) BrokenPipeError: [Errno 32] Đường ống bị hỏng
lá cờ hr
@Rukhan có lẽ đó là vì `cat` đang đọc (thay vì ghi vào) tệp đầu ra dự định, vì vậy thực sự không có ghi chú nào đang đọc chương trình python của bạn đang gửi xuống đường ống
trinity avatar
lá cờ us
@steeldriver Đã hiểu! Không nhận ra rằng việc sử dụng cat là dành cho stdin một cách rõ ràng như cat EulerianCycle.py, nơi tôi đang cố gắng làm cho nó đọc thiết bị xuất chuẩn và gửi nó xuống một đường ống
lá cờ hr
@Trinity `cat` sẽ làm điều đó - nếu bạn không cung cấp cho nó tệp đầu vào hoặc cung cấp cho nó `-` dưới dạng tệp đầu vào giả. Nhưng nó không cần thiết ở đây.
trinity avatar
lá cờ us
@steeldriver lưu ý với lời cảm ơn, chúc bạn vui vẻ!
Điểm:1
lá cờ it

Ngoài ra, bạn có thể sử dụng:

EulerianCycle.py | tee euleriancycleout.txt

để gửi nội dung tới tệp văn bản và tới thiết bị xuất chuẩn đồng thời trong 2 luồng riêng biệt. Nói cách khác, nội dung sẽ kết thúc ở cả tệp văn bản và được in trong thiết bị đầu cuối.

Tôi luôn làm theo cách này vì nó cho tôi thấy những gì đã viết và giúp tôi không phải mở vim để kiểm tra công việc của mình.

Nate T avatar
lá cờ it
Lưu ý: Điều này chỉ nhằm cung cấp ngữ cảnh bổ sung, hỗ trợ cho câu trả lời ở trên.
trinity avatar
lá cờ us
Cảm ơn thông tin, thực sự hữu ích!
Điểm:-1
lá cờ us

Tìm ra tôi có thể sử dụng py EulerianCycle.py euleriancycle.txt | con mèo > euleriancycleout.txt | mv -t đầu ra/ euleriancycleout.txt

HOẶC

py EulerianCycle.py euleriancycle.txt | mèo > euleriancycleout.txt & mv -t đầu ra/ euleriancycleout.txt

Vẫn mở cho một lệnh khả thi sẽ thực hiện việc này một cách chính xác hơn. :)

chỉnh sửa: mã được trình bày không hiệu quả, xem câu trả lời được đánh dấu kiểm màu xanh lá cây

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.