كيفية تشغيل أول عملية من قائمة العمليات المخزنة في ملف وحذف السطر الأول كما لو كان الملف طابور وأنا يسمى "بوب" ؟

StackOverflow https://stackoverflow.com/questions/366533

سؤال

كيفية تشغيل أول عملية من قائمة العمليات المخزنة في ملف فورا حذف السطر الأول كما لو كان الملف طابور وأنا يسمى "بوب" ؟

أود أن اتصل الأمر الأول المدرجة في ملف نصي مع كفاصل في البوب مثل الأزياء:


الشكل 1:

cmdqueue.lst :

proc_C1
proc_C2
proc_C3
.
.

الشكل 2:

البوب الأمر الأول عبر popcmd:

proc_A | proc_B | popcmd cmdqueue.lst | proc_D

الشكل 3:

cmdqueue.lst :

proc_C2
proc_C3
proc_C4
.
.
هل كانت مفيدة؟

المحلول

وpop-cmd.py:

#!/usr/bin/env python
import os, shlex, sys
from subprocess import call
filename = sys.argv[1]
lines = open(filename).readlines()
if lines:
    command = lines[0].rstrip()
    open(filename, "w").writelines(lines[1:])
    if command:
        sys.exit(call(shlex.split(command) + sys.argv[2:]))

مثال:

proc_A | proc_B | python pop-cmd.py cmdstack.lst | proc_D

نصائح أخرى

وأوه، هذا ومسلية أونيلينير.

حسنا، ها هي الصفقة. ما تريده هو البرنامج الذي، عندما دعا، يطبع السطر الأول من الملف إلى المعياري، ثم حذف هذا الخط من الملف. يبدو وكأنه عمل لل<م> الحوار الاقتصادي الاستراتيجي (1) .

وحاول

proc_A | proc_B | `(head -1 cmdstack.lst; sed -i -e '1d' cmdstack.lst)` | proc_D

وأنا متأكد من أن الشخص الذي كان قد سبق القهوة يمكن تغيير برنامج الحوار الاقتصادي الاستراتيجي ليست بحاجة الى <م> رئيس (1) دعوة، ولكن أن يعمل، ويظهر قبالة باستخدام المستوى الفرعي ( "( فو) "يعمل في عملية الفرعية.)

افترض أن كنت باستمرار إضافة إلى الملف أيضا ، حتى إعادة كتابة الملف يضعك في خطر من الكتابة فوق البيانات.لهذا النوع من المهام أعتقد أنك ستكون أفضل باستخدام ملفات فردية لكل طابور الدخول باستخدام التاريخ/الوقت لتحديد ترتيب ثم كما كنت معالجة كل ملف يمكن إلحاق البيانات إلى ملف سجل ثم حذف الزناد الملف.

حقا بحاجة الى مزيد من المعلومات من أجل اقتراح حل جيد.من المهم أن تعرف كيفية الملف هو الحصول على تحديث.هو الكثير من عمليات منفصلة ، واحدة فقط عملية ، إلخ.

وأعتقد أنك ستحتاج إلى كتابة الملف - على سبيل المثال تشغيل أمر لسرد كافة الخطوط ولكن أولا، الكتابة التي إلى ملف مؤقت وتسميته إلى الأصل. ويمكن القيام بذلك باستخدام الذيل أو AWK أو بيرل اعتمادا على الأوامر المتوفرة لديك.

إذا كنت تريد علاج ملف مثل كومة، ثم نهج أفضل سيكون لديك الجزء العلوي من كومة في نهاية الملف.

وهكذا يمكنك بسهولة خفض قبالة ملف في بداية السطر الأخير (= البوب)، وببساطة إلحاق الملف كما كنت دفع.

ويمكنك استخدام برنامج نصي باش القليل. تسميته "popcmd":

#!/bin/bash
cmd=`head -n 1 $1`
tail -n +2 $1 > ~tmp~
mv -f ~tmp~ $1
$cmd

تحرير: استخدام الحوار الاقتصادي الاستراتيجي لاثنين من خطوط المتوسطة، مثل أظهر تشارلي مارتن، هو أكثر من ذلك بكثير أنيقة، وبطبيعة الحال:

#!/bin/bash
cmd=`head -n 1 $1`
sed -i -e '1d' $1
$cmd

تحرير: يمكنك استخدام هذا بالضبط كما في المثال رمز استخدامك:

proc_A | proc_B | popcmd cmdstack.lst | proc_D

ولا يمكنك الكتابة إلى بداية الملف، لذلك الاستغناء عن خط 1 سيكون هناك الكثير من العمل (إعادة كتابة بقية الملفات (التي ليست في الواقع عمل الكثير للمبرمج (هو ماذا كل أخرى الجواب آخر قد كتب لك :)))).

وأود أن أوصى إبقاء كل شيء في الذاكرة واستخدام كومة الكلاسيكية بدلا من ملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top